use*_*288 0 sql oracle plsql dynamic-sql
我试图通过循环传递我想要调用的过程的名称,因为我需要连续调用 3 个类似的过程。
让我们打电话给他们:
它们每个都有 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;
Run Code Online (Sandbox Code Playgroud)
第 5 行当前失败。(立即执行)带有:“无效的 SQL 语句”
您“忘记”包含BEGIN- END。您正在调用一个过程,这就是 PL/SQL。
例如:我的表包含几个过程,它们看起来都一样——它们只是显示它们的名称。
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.
Run Code Online (Sandbox Code Playgroud)
这是您应该做的事情(注意第 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.
Run Code Online (Sandbox Code Playgroud)