0

問題があります Dynamic Call Store Procedure

    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;

そのようには機能しません。多くのプロシージャを呼び出し、そのプロシージャには異なる in パラメーターと out パラメーターがあるため、動的変数 bind を作成するにはどうすればよいですか。私が抱えている問題を理解していただければ幸いです。どうすればこの問題を解決できますか thx

4

1 に答える 1

5

ここに簡単な手順があります

 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;
于 2015-06-22T11:51:30.270 に答える