0
是否有可能,如果是的話,將存儲過程從表中的列表中選擇一個存儲過程,然後在oracle數據庫中執行它的語法會是什麼樣子?存儲過程從表中選擇一個存儲過程,並在oracle數據庫中執行它?
是否有可能,如果是的話,將存儲過程從表中的列表中選擇一個存儲過程,然後在oracle數據庫中執行它的語法會是什麼樣子?存儲過程從表中選擇一個存儲過程,並在oracle數據庫中執行它?
存儲過程應使用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
我接收此錯誤PLS-00201:識別符「IC_REP_BLUE_GOLD_SOC_THANK_YOU」時我取代在這部分代碼的「PROC1」必須聲明爲:插入proc_table值(1,「IC_Rep_Blue_Gold_Soc_Thank_You」); –
@darlenelevielle該程序是否需要任何參數?如果是這樣,你可能需要添加一些信息到表格和執行代碼。它是否與PL/SQL運行的模式相同?如果不是,則可能需要在表中或代碼中追加模式名稱。 –
我同意,我將添加架構名稱。這應該做到這一點。這個過程並不需要任何參數,事實上,所有插入到這個表中的過程都不需要參數。 –