Oracle PL/SQL 可以使用动态过程名称吗?

Possible for Oracle PL/SQL to use dynamic procedure name?

我正在尝试将我要调用的过程的名称传递给循环,因为我需要连续调用 3 个类似的过程。

让我们称呼他们:

  1. Proc_A
  2. Proc_B
  3. Proc_C

它们每个都有 1 个输入变量和 2 个输出变量。

关于我可以改变什么来让它工作有什么想法吗?

FOR l_counter in 1..3
LOOP
    SELECT PROC_NAME into V_PROC FROM PROC_LIST WHERE PROC_ID = l_counter;

    EXECUTE IMMEDIATE 'PROC_DB.' || V_PROC || '(1,V_STEP_ERROR_CODE,V_STEP_MSG)';
    COMMIT;
END LOOP;

第 5 行当前失败。 (The Execute Immediate) with: "invalid SQL statement"

您“忘记”包含 BEGIN-END。您正在调用一个过程,那就是 PL/SQL.

例如:我的 table 包含几个程序,它们看起来都一样 - 它们只是显示它们的名称。

SQL> select * from proc_list;

   PROC_ID PR
---------- --
         1 p1
         2 p2
         3 p3

SQL> create procedure p1 as begin dbms_output.put_Line('p1'); end;
  2  /

Procedure created.

这是你应该做的(注意第 8 行):

SQL> declare
  2    v_proc proc_list.proc_name%type;
  3  begin
  4    for l_counter in 1 .. 3 loop
  5      select proc_name into v_proc from proc_List
  6      where proc_id = l_counter;
  7
  8      execute immediate 'begin ' || v_proc ||'; end;';
  9    end loop;
 10  end;
 11  /
p1
p2
p3

PL/SQL procedure successfully completed.