动态调用带参数的存储过程

如何动态调用带参数的存储过程呢?

上面测试的都是没有参数的存储过程;
请问如何动态调用带参数的存储过程;
如: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  

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  

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  

PL/SQL 过程已成功完成。

SQL> 
thomas zhang 的杂货铺
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/658202/viewspace-1032467/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/658202/viewspace-1032467/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值