比如mssql里可以这么写
exec('exec' + v_sp_name + ' ' + v_sp_p1)
v_sp_name是存储过程名,v_sp_p1是参数名但是oracle里好像不能直接exec

解决方案 »

  1.   

    EXECUTE IMMEDIATE '¹ý³ÌÃû('  || para1 || ',' || para2 || ')';
      

  2.   

    EXECUTE IMMEDIATE '过程名('  || para1 || ',' || para2 || ')';
      

  3.   

    SQL> create procedure p_temp as
      2  begin
      3  dbms_output.put_line('Procedure is executed!');
      4  end;
      5  /过程已创建。
    SQL> create or replace procedure p_1(v_pname varchar2) as
      2  
      3  begin
      4  execute immediate '
      5  begin
      6  '||v_pname||';'
      7  ||' end;';
      8  end;
      9  /过程已创建。SQL> exec p_1('p_temp');
    Procedure is executed!PL/SQL 过程已成功完成。SQL>
      

  4.   

    我测试的过程中发现必须使用begin ... end 才可以
    SQL> create or replace procedure p_1(v_pname varchar2) as
      2  
      3  begin
      4  execute immediate v_pname;
      5  end;
      6  /过程已创建。SQL> exec p_1('p_temp');
    BEGIN p_1('p_temp'); END;*
    ERROR 位于第 1 行:
    ORA-00900: 无效 SQL 语句
    ORA-06512: 在"SCOTT.P_1", line 4
    ORA-06512: 在line 1
    SQL>
      

  5.   

    动态sql.将要调用的传到一串字符串中去.
      

  6.   

    create procedure v_temp as
     v_sql varchar2;
      begin
       v_sql:='你要用的存储过程名及参数';
       dbms_output.put_line(v_sql);
       exectude immediate v_sql;
      end v_temp;
      

  7.   

    create or replace procedure p_1(v_pname varchar2) as
    retstr varchar2(100); 
    begin
     execute immediate ' begin '||v_pname||'('||retstr||');  end;';
    dbms_output.put_line(retstr);
    end;
    /
      

  8.   

    在写execute immediate的时候用如下方式:
      execute immediate 'begin proc_name(:para1,:para2) end;' using 
         para1 in para1_value,para2 out para2_value;
    其中:para1是输入变量,para2是输出变量
      

  9.   

    --如果保存过程名的变量为var:
    exec  :var||(parm);
      

  10.   

    --调试一下,在PL-SQL中可以:
    --如果保存过程名的变量为var:
       :var||(parm);