【问题标题】:Is it possible to take a stored procedure name as input parameter in another stored procedure and execute it?是否可以将存储过程名称作为另一个存储过程的输入参数并执行它?
【发布时间】:2020-04-01 15:03:16
【问题描述】:

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

我通过使用动态 SQL 进行了尝试。我为此写的代码sn-p:

v_proc_query := ':1(:2, :3)';
execute immediate v_proc_query using p_proc_name, p_param1, p_param2;

但是上面的语句给出了错误:ORA-00900: invalid SQL statement 我正在使用 Oracle 12c。

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

【问题讨论】:

    标签: oracle stored-procedures plsql oracle12c


    【解决方案1】:

    大概是这样的吧?

    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>
    

    【讨论】:

    • 这确实有效。但实际的 proc 集有一个 SYS_REFCUSROR 作为 out 参数。我在 runner proc 中声明了一个 SYS_REFCURSOR 变量并尝试传递它,但这给出了一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多