動態呼叫帶引數的儲存過程

dupeng457發表於2010-03-30
如何動態呼叫帶引數的儲存過程呢?

上面測試的都是沒有引數的儲存過程;
請問如何動態呼叫帶引數的儲存過程;
如:proc_one,proc_two都是沒有引數的;
如果是有引數,怎麼樣把引數從proc_main傳遞給proc_one,
proc_one修改後,還能傳遞給proc_main;

空心菜 | 12/12/2006, 22:47

今天中午抽空為其寫了一個新的demo,希望能有所幫助


說明:proc_one、proc_two、proc_three用來模擬三個procedure,proc_main用來透過動態呼叫前面三個過

程的過程。在proc_main中輸入一個引數,在proc_one/two/three中處理後返回到proc_main中。下面是code

和測試過程。

SQL> create or replace procedure proc_one(p_arg in out varchar2) as
  2  begin  
  3    dbms_output.put_line('one proc call, input arg is '||p_arg);
  4    p_arg:=p_arg||' return from proc_one';
  5  end;
  6   /

過程已建立。

SQL> 
SQL> create or replace procedure proc_two(p_arg in out varchar2) as
  2  begin
  3   dbms_output.put_line('two proc call, input arg is '||p_arg);
  4   p_arg:=p_arg||' return from proc_two';
  5  end;
  6  /

過程已建立。

SQL> 
SQL> create or replace procedure proc_three(p_arg in out varchar2) as
  2  begin
  3   dbms_output.put_line('three proc call, input arg is '||p_arg);
  4   p_arg:=p_arg||' return from proc_three';
  5  end;
  6  /

過程已建立。

SQL> create or replace procedure proc_main(
  2   v_procname in varchar2,
  3   p_arg in varchar2 default null)
  4  as
  5  
  6   v_sql varchar2(255);
  7   v_ret varchar2(255); 
  8  begin
  9   v_ret:=p_arg; 
 10   v_sql:='begin '||v_procname||'(:v1); end;';
 11   execute immediate v_sql using in out v_ret;
 12   dbms_output.put_line('main proc call completed!'); 
 13   dbms_output.put_line('main input arg return is '||v_ret);
 14  end;
 15  /

過程已建立。

SQL> 
SQL> 
備註:v_ret變數是在proc_main中動態傳入到要呼叫的過程中的引數,然後接受被呼叫過程處理
後的結果並在proc_main中顯示。
SQL> set serveroutput on
SQL> exec proc_main('proc_one','call one');
one proc call, input arg is call one
main proc call completed!
main input arg return is call one return from proc_one

PL/SQL 過程已成功完成。

SQL> exec proc_main('proc_two','call two');
two proc call, input arg is call two
main proc call completed!
main input arg return is call two return from proc_two

PL/SQL 過程已成功完成。

SQL> exec proc_main('proc_three','call three');
three proc call, input arg is call three
main proc call completed!
main input arg return is call three return from proc_three

PL/SQL 過程已成功完成。

SQL> 
thomas zhang 的雜貨鋪
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/658202/viewspace-1032467/,如需轉載,請註明出處,否則將追究法律責任。

相關文章