单独执行语句块
‘begin  execute immediate 'create table t2 as select sysdate dd from dual';end;’
没问题.
...............而create or replace procedure  ct as 
begin
   execute immediate 'create table t2 as select sysdate dd from dual';
end;在存储过程中有execute immediate的建表语句,
为什么执行该 procedure会报错???
是权限问题吗?
在存储过程中执行‘execute immediate’要注意什么?

解决方案 »

  1.   

    create or replace procedure p1_test(a in varchar2,b in varchar2,c out varchar2)
     is
     begin
     c := a||b;
     end p1_test;
     
     
    declare
    v_sql varchar2(1000);
    c varchar2(1000);
    begin
    v_sql:='begin p1_test(:v1,:v2,:v3); end;';
    execute immediate v_sql using in '1',in '2',out c;
    dbms_output.put_line(c);
    end;
      

  2.   

    ---可以啊...这样就肯定是权限问题
    SQL> 
    SQL> create or replace procedure  ct as
      2  begin
      3    execute immediate 'create table t2 as select sysdate dd from dual';
      4  end;
      5  /Procedure createdSQL> 
      

  3.   


    grant create any procedure to uname
      

  4.   

    show error
    看看什么错误
    该不会是要建表已经存在了吧
    要不应该是权限问题。create procedure权限
      

  5.   

    我是该 帖子的发贴人。
    谢谢楼上的朋友,我刚查到应该在过程名后加 authid   current_user,即 
    create or replace procedure  ct authid   current_user,就解决问题了。
    我说的意思是调用该过程时报错了。