我现在有一张表记录了存储过程的名字,参数是固定的
如何能够在另外一个存储过程中,在通过cursor得到存储过程名称后,动态调用
我查看了oracle的帮助手册里面说的方法是
stmt:='call '||spname||' (:param1,:param2)';
execute immediate stmt using param1,param2
单结果不行

解决方案 »

  1.   

    我来试验一下:SQL> ed
    已写入文件 afiedt.buf  1  create or replace procedure show_str(
      2  str    in    varchar2
      3  )
      4  as
      5  begin
      6  dbms_output.put_line(str);
      7* end;
    SQL> /过程已创建。SQL> create table procedure_table(procedure_name varchar2(40));表已创建。SQL> insert into  procedure_table values('show_str');已创建 1 行。
    SQL> ed
    已写入文件 afiedt.buf  1  declare
      2  parameter varchar2(50):='I like oracle!';
      3  str       varchar2(50);
      4  begin
      5  for x in (select * from procedure_table) loop
      6  str:='call '||x.procedure_name||'(:v1)';
      7  dbms_output.put_line(str);
      8  execute immediate str using parameter;
      9  end loop;
     10* end;
    SQL> /
    call show_str(:v1)
    I like oracle!PL/SQL 过程已成功完成。
      

  2.   

    是否有in out参数?
    如果有的话,调用的时候也要加上
    例如:
    execute immediate stmt using in out param1,param2;