使用名称的字符串表示来调用PLSQL存储过程

bje*_*ang 2 oracle plsql

我有一个按照给定顺序为表中的所有行调用的过程列表.我想将它们全部添加到一个单独的表中,而不是硬编码过程调用,并遍历包含调用每个过程的过程的行.所有过程都需要相同的输入参数.

这是可能吗?

Ale*_*sej 5

假设你有这张桌子:

create table procs(procName) as (
    select 'proc1' from dual union all
    select 'proc2' from dual union all
    select 'proc3' from dual 
)    
Run Code Online (Sandbox Code Playgroud)

和这些程序:

create or replace procedure proc1(p1 in varchar2, p2 in number) is begin dbms_output.put_line('running Proc1(' || p1 || ', ' || p2 || ')'); end;
create or replace procedure proc2(p1 in varchar2, p2 in number) is begin dbms_output.put_line('running Proc2(' || p1 || ', ' || p2 || ')'); end;
create or replace procedure proc3(p1 in varchar2, p2 in number) is begin dbms_output.put_line('running Proc3(' || p1 || ', ' || p2 || ')'); end;
Run Code Online (Sandbox Code Playgroud)

你可以尝试:

declare
    yourParameter1 varchar2(10) := 'X';
    yourParameter2 number       := 10;
begin
    for i in ( select procName from procs order by procName) loop
        execute immediate 'begin ' || i.procName || '(:1, :2); end;' using yourParameter1, yourParameter2;
    end loop;
end;
Run Code Online (Sandbox Code Playgroud)

你得到什么:

running Proc1(X, 10)
running Proc2(X, 10)
running Proc3(X, 10)
Run Code Online (Sandbox Code Playgroud)