2016-01-13 115 views
2

我在一個封裝像6個插入塊(職業,地位,品位等):如果PLSQL包語句

create or replace package body XX_package_cust 
AS 

PROCEDURE main_procedure(p_entity In VARCHAR2 default 'ALL') 

is 

begin 

if p_entity='Job' 
then 
--execute job block 

elsif p_entity='Position' 

--execute postion block 

elsif p_entity='Grade' 

--execute grade block 
end if; 

end; 

現在在上面的if else我想通過'ALL'在p_entity這樣如果all通過所有這些塊應該執行,並且如果'工作',只需要執行相應塊的等級位置。

在此例如在工作部分現在

begin 

    begin 

    insert into job_i 
    -------- 

    end; 

    begin 
    insert into job_x 
    ---- 
    end; 
    end; 

,如果我有別的,如果每個...我將不得不做這樣的事情:

begin 
if p_entity ='JOB' 
then 
    begin 

    insert into job_i 
    -------- 

    end; 

    begin 
    insert into job_x 
    ---- 
    end; 
end if; 
    end; 

也就是說,如果其他每個和每一個塊。有沒有其他出路

+0

我不明白的問題..只是把它放在一個if別的喜歡你做過 – sagi

+0

我編輯過它 –

回答

3

你可以使每個條件檢查具體的價值或'ALL'。請注意,你必須用簡單的if s到更換elsif聲明:

if p_entity IN ('ALL', 'Job') 
then 
--execute job block 
end if; 

if p_entity IN ('ALL', 'Position') 
--execute position block 
end if; 

if p_entity IN ('ALL', 'Grade') 
--execute grade block 
end if; 
0

試試這個

CREATE OR REPLACE PACKAGE body XX_package_cust 
AS 
    PROCEDURE main_procedure(
     p_entity IN VARCHAR2 DEFAULT 'ALL') 
    IS 
    BEGIN 
    IF p_entity ='Job' THEN 
     --execute job block 
     dbms_output.put_line('Job block executed'); 
    elsif p_entity='Position' THEN 
     --execute postion block 
     dbms_output.put_line('Position block executed'); 
    elsif p_entity='Grade' THEN 
     --execute grade block 
     dbms_output.put_line('Grade block executed'); 
    elsif p_entity='All' THEN 
     --execute job block 
     dbms_output.put_line('Job block executed'); 
     --execute postion block 
     dbms_output.put_line('Position block executed'); 
     --execute grade block 
     dbms_output.put_line('Grade block executed'); 
    END IF; 
    END; 
END;