我有一组具有相同接口的存储过程,这些存储过程中的一个将作为输入参数传递给运行程序存储过程。如何在跑步程序中执行此存储过程。
我通过使用动态SQL进行了尝试。我为此编写的代码段:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
但是上面的语句给出了错误:v_proc_query := ':1(:2, :3)';
execute immediate v_proc_query using p_proc_name, p_param1, p_param2;
我正在使用Oracle 12c。
什么是实现目标的正确方法?
答案 0 :(得分:2)
也许是这样?
SQL> set serveroutput on
SQL> create or replace procedure p_test (par_deptno in number)
2 is
3 l_cnt number;
4 begin
5 select count(*)
6 into l_cnt
7 from emp
8 where deptno = par_deptno;
9 dbms_output.put_line('count = ' || l_cnt);
10 end;
11 /
Procedure created.
SQL> create or replace procedure p_test_2 (par_proc_name in varchar2, par_deptno in number)
2 is
3 l_str varchar2(200);
4 begin
5 l_str := 'begin ' ||
6 dbms_assert.sql_object_name(par_proc_name) ||
7 '(' || par_deptno || ');' ||
8 'end;';
9 execute immediate l_str;
10 end;
11 /
Procedure created.
SQL> exec p_test_2('p_test', 10);
count = 3
PL/SQL procedure successfully completed.
SQL>