我现在有一张表记录了存储过程的名字,参数是固定的 
如何能够在另外一个存储过程中,在通过cursor得到存储过程名称后,动态调用,调用方式已经按照说明文档写好了,可是现在不知道怎么接受存储过程返回值!希望大家帮帮忙!!
CREATE OR REPLACE PROCEDURE PROC_ENTRY(i_spName in varchar2,i_branch_code in varchar2, i_date_begin in varchar2,i_date_end in varchar2,o_return_code out NUMBER)
IS
procStr varchar2;
BEGIN
procStr:= 'call '||i_spName|| '(:v1,:v2,:v3,:v4)';
execute immediate procStr using i_branch_code,i_date_begin,i_date_end,o_return_code,o_return_code;
END PROC_ENTRY;

解决方案 »

  1.   

    using 后面可以跟 IN, OUT, IN OUT 
      

  2.   

    using 后面跟 IN, OUT, IN OUT 这几个后是分辨参数是输入还是输出类型的。
    如果我本来就知道这个参数是输入类型了,我在执行
    execute immediate procStr using i_branch_code,i_date_begin,i_date_end,o_return_code,o_return_code;后怎么接受过程的返回值是一个问题?希望能详细一些,谢谢了!
      

  3.   

    在 sqlplus 或 plsql 中的命令窗口执行
    create or replace procedure p_test_call
    (
        in_parm1                number,
        in_parm2                number,
        out_parm1     out       number
    )
    as
    begin
        out_parm1 := in_parm1 + in_parm2;
    end p_test_call;
    /
    create or replace procedure p_test
    (
        in_parm1                number,
        in_parm2                number,
        out_parm1     out       number
    )
    as
    begin
        execute immediate 'call p_test_call(:1, :2, :3)' using in_parm1, in_parm2, out out_parm1;
    end p_test;
    /var r_parm  number;call p_test(1, 2, :r_parm);print r_parm;