【问题标题】:Dynamic call Store Procedure (execute immediate ) Out parameters Problems动态调用存储过程(立即执行)输出参数问题
【发布时间】:2015-06-22 10:31:20
【问题描述】:

我有问题动态调用存储过程

    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2 '',:v_output2);  end;';
    execute immediate v_sql
    using  out v_output2 ;
    dbms_output.put_line(v_output2 || ' ' );

在这里我可以使用 execute immediate 调用过程。 但我的问题是动态绑定变量。这个值来自日志表,然后我解析 execute_immediate 过程

    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2'',:v_output2);  end;';
    v_sql1:= ||using||  'out v_output2 ' ;

    execute immediate v_sql
    v_sql1;

它不是那样工作的。我怎样才能使动态变量绑定,因为我调用了很多过程,而那个过程有不同的输入和输出参数。 我希望你能理解我有什么问题。我怎样才能解决这个问题 thx

【问题讨论】:

    标签: oracle stored-procedures plsql execute execute-immediate


    【解决方案1】:

    这是一个简单的过程

     create procedure test_proc(p_user varchar2, p_code varchar2, p_error varchar2) is
     begin
       p_error := p_user || p_code;
     end; 
    

    相同的调用代码..

    Declare
      v_test_proc varchar2(50) := 'test_proc';
      p_user      varchar2(50) := 'test_name';
      p_code      varchar2(50) := 'test_code';
      p_error     varchar2(100);
      v_sql       varchar2(2000);
    begin
      v_sql := 'begin ' || v_test_proc || '( :1 ,:2, :3 ); end;';
      execute immediate v_sql
        using p_user, p_code, out p_error;
      dbms_output.put_line(p_error);
    end;
    

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多