是否可以将存储过程名称作为另一个存储过程中的输入参数并执行?

时间:2019-12-08 06:56:39

标签: oracle stored-procedures plsql oracle12c

我有一组具有相同接口的存储过程,这些存储过程中的一个将作为输入参数传递给运行程序存储过程。如何在跑步程序中执行此存储过程。

我通过使用动态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。

什么是实现目标的正确方法?

1 个答案:

答案 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>