2015-11-12 67 views

回答

0

存儲過程應使用EXECUTE IMMEDIATE來執行具有過程名稱的匿名PL/SQL塊。這可以像創建一個像begin proc_name; end;這樣的字符串一樣簡單。如果有參數和返回值,情況會變得更加困難。

create table proc_table(id number, procedure_name varchar2(100)); 
insert into proc_table values(1, 'proc1'); 
insert into proc_table values(2, 'proc2'); 

create or replace procedure proc1 is begin dbms_output.put_line('1'); end; 
/
create or replace procedure proc2 is begin dbms_output.put_line('2'); end; 
/

begin 
    for procedures in 
    (
     select procedure_name 
     from proc_table 
     order by procedure_name 
    ) loop 
     execute immediate 'begin '||procedures.procedure_name||'; end;'; 
    end loop; 
end; 
/

Output: 
1 
2 
+0

我接收此錯誤PLS-00201:識別符「IC_REP_BLUE_GOLD_SOC_THANK_YOU」時我取代在這部分代碼的「PROC1」必須聲明爲:插入proc_table值(1,「IC_Rep_Blue_Gold_Soc_Thank_You」); –

+0

@darlenelevielle該程序是否需要任何參數?如果是這樣,你可能需要添加一些信息到表格和執行代碼。它是否與PL/SQL運行的模式相同?如果不是,則可能需要在表中或代碼中追加模式名稱。 –

+0

我同意,我將添加架構名稱。這應該做到這一點。這個過程並不需要任何參數,事實上,所有插入到這個表中的過程都不需要參數。 –