try:
execute immediate 
'declare
 v_out varchar2(60);
 begin
 v_out:='||funname||';
 ...
 end;';
...

解决方案 »

  1.   

    bzszp(SongZip):
    这样不能得到返回值呀
      

  2.   

    OK!
    测试:
    第一种:带返回参数的存储过程
    SQL> create or replace procedure p_demo(v_col1 in varchar2,v_col2 out varchar2)
      2  as
      3  begin
      4  v_col2:=v_col1||' out!';
      5  end p_demo;
      6  /过程已创建。SQL> declare
      2  v_1 varchar2(20):='aaa';
      3  v_2 varchar2(30);
      4  begin
      5  execute immediate 'begin p_demo(:1,:2); end;' using v_1,out v_2;
      6  dbms_output.put_line(v_2);
      7  end;
      8  /
    aaa out!PL/SQL 过程已成功完成。第二种:使用函数
    SQL> create or replace function f_demo(v_col1 varchar2) return varchar2
      2  as
      3  begin
      4  return v_col1||' out!';
      5  end f_demo;
      6  /函数已创建。SQL> declare
      2  v_1 varchar2(20):='aaa';
      3  v_2 varchar2(30);
      4  begin
      5  execute immediate 'begin :1:=f_demo(:2); end;' using out v_2,v_1;
      6  dbms_output.put_line(v_2);
      7  end;
      8  /
    aaa out!PL/SQL 过程已成功完成。SQL> 应该没问题了。