可以,调用的时候采用动态SQL就行了。例如:
declare
  proc_name varchar(100);
  sql_str   varchar(200):='begin ';
  cursor name_cur is select procname from sometable;
begin
  open name_cur;
  loop
     fetch name_cur into proc_name ;
     exit when name_cur%NOTFOUND;
     sql_str := sql_str||proc_name||'; '
  end loop;
  close name_cur;
  sql_str := sql_str||' end; '
  execute immediate sql_str;
end;  

解决方案 »

  1.   

    当有参数时,楼上方法不可行。若然没有参数,也不用存在表中
    create or replace procedure name_pro
    as
    str varchar2(100):='begin';
    cursor t_sor is
    select object_name from user_objects where object_type='PROCEDURE';
    begin
    for v_sor in t_sor loop
    str:=str||v_sor.object_name||';';
    end loop;
    str:=str||'end;';
    execute immediate str;
    end;
    /
      

  2.   

    修改一个,在begin后多加一个空格
    str varchar2(100):='begin ';
      

  3.   

    to beckhambobo(beckham) 
    你这样可是把所有的存储过程都执行了一遍,太......如果有参数,也同样可以用我的方法,只要把参数也拼在动态SQL中,不就行了吗?
      

  4.   

    可以用dbms_sql哪个包来,来实现动态sql的实行,好像可以解决你的问题,可以考虑看看!
      

  5.   

    如果要求非常灵活,可以将存储过程涉及的参数类型、参数个数、参数名称等信息与存储过程的名字一起存在数据库的表中,然后利用这些信息完成动态SQL的拼接。
      

  6.   

    当然可以实现,采用动态SQL语句:
    1. 从user_objects找出object_type为PROCEDURE的所有object_name;
    2. 循环中根据object_name组合动态SQL语句;
    3. 根据ORACLE服务器版本调用两种动态SQL语句方式(Native、DBMS_SQL)来执行该动态语句;
    4. 循环完成,OK。