试试
dbms_sql.parse            (v_cursorid,'exec '||v_user_name||'.'||v_procedure_name,dbms_sql.native)

解决方案 »

  1.   

    1;你的方法应该行的通,可能出错原因是你没有给当前用户授于足够的权限。你应当把可能用到的其它用户的表都授于该用户足够的操作权限。
    2:另外你可以先定义一个字符串变量。把该构造好的SQL语句赋给该字符串变量,然后在dbms_sql.parse(v_cursorid,字符串变量,dbms_sql.native)语句中用。
    3:或者你也可以用EXECUTE IMMEDIATE TRIM(字符串变量)来执行,从理论上讲这种方法要快于上边的方法。
      

  2.   

    以上方法都因改不可以,因为我试验了一下
    execute immediate 不支持存储过程。
      

  3.   

    14:54:55 jlanzpa817>CREATE OR REPLACE PROCEDURE copy IS 
    14:54:56   2       id_var             NUMBER; 
    14:54:56   3       source_cursor      INTEGER; 
    14:54:56   4       ignore             INTEGER; 
    14:54:56   5    BEGIN 
    14:54:56   6       source_cursor := dbms_sql.open_cursor; 
    14:54:56   7       DBMS_SQL.PARSE(source_cursor, 
    14:54:56   8           'begin demo.hello; end;', 
    14:54:56   9            DBMS_SQL.native); 
    14:54:56  10       ignore := DBMS_SQL.EXECUTE(source_cursor); 
    14:54:56  11       DBMS_SQL.CLOSE_CURSOR(source_cursor); 
    14:54:56  12    END; 
    14:54:56  13  /过程已创建。已用时间:  00: 00: 00.70
    14:54:57 jlanzpa817>exec copy 
    helloPL/SQL 过程已成功完成。