参考下面的程序,它是从表中获得存储过程的名称,然后执行该过程:
SQL> CREATE OR REPLACE PROCEDURE MYPR
  2  (av out number)
  3  IS
  4  BEGIN
  5    av:= 99;
  6  END;
  7  /过程已创建。SQL> CREATE OR REPLACE PROCEDURE MYPR2
  2  (av out varchar2)
  3  IS
  4     lvr  number(3);
  5      lvn  varchar2(10);
  6      lvsql  varchar2(100);
  7      lvtblnm  varchar2(10);
  8  BEGIN
  9    select 'mypr(:a)' into lvtblnm from dual;  -- 使用你自己的表
 10    execute immediate 'begin ' || lvtblnm || '; end;' using out  lvr;
 11    dbms_output.put_line(lvr);
 12    av:='OK';
 13  END;
 14  /过程已创建。SQL> declare
  2   lvok varchar2(10);
  3  begin
  4    mypr2(lvok);
  5    dbms_output.put_line(lvok);
  6  end;
  7  /
99
OKPL/SQL 过程已成功完成。

解决方案 »

  1.   

    楼上用的是本地的动态sql
    你也可以用dbms_sql包
    都可以,建议用本地动态sql
    这那里是什么高技术,查查书,都有的
    呵呵
      

  2.   

    create procedure a
    as
    begin
    null;
    end;
    /
    create procedure b
    as 
    begin
    a;
    end;
    /
      

  3.   

    用dbms_sql包,具体的可以查看帮助
      

  4.   

    测试程序下:一切OK!谢谢··
    create or replace  procedure GetDate(vinfo in varchar2,vStrDate out varchar2)
    as
    begin
    dbms_output.put_line(vinfo);
    select To_char(sysdate,'yyyymm') into vStrDate from dual;
    end;
    /create or replace procedure ProTest(err out integer)
    as
    vStrDate varchar2(20);
    vProName varchar2(30);
    vTestInfo varchar2(40);
    begin
    vTestInfo:='Helle world!';
    vProName:='GetDate(:vinfo,:vStrDate)';
    vStrDate:='this is test';
    execute immediate 'begin  '||vProName||'; end '||';' using in vTestInfo,out vStrDate;
    dbms_output.put_line(vStrDate);
    dbms_output.put_line(vProName);
    err:=0;
    exception
    when others then
    err:=SQLCODE;
    end;
    /set serveroutput onvar err number
    exec ProTest (:err);
    print err