这个错误好像经常出现呀,网上搜了一圈头都晕了。
我现在有这样的存储过程:create or replace procedure xxx is
beginexecute immediate 'create table hello_0(serv_id number(12) not null)';end xxx;
PS:单独执行那个create table是没有问题的这个过程创建成功后我执行了execute xxx;
然后出现了提示ORA-01031: insufficient privileges
ORA-06512: at "INTERFACE.XXX", line 4
ORA-06512: at line 2
按说的话,我是有创建表的权限的,但是提示权限不足。
另外两个错误就很晕了,完全不明白是什么意思。请高手帮忙分析一下!!

解决方案 »

  1.   


    create or replace procedure xxx is
    beginexecute immediate 'drop table hello_0';execute immediate 'create table hello_0(serv_id number(12) not null)';end xxx;
      

  2.   

    还是不行啊~就是create这一句出问题
    ORA-01031: insufficient privileges
    ORA-06512: at "INTERFACE.XXX", line 6
    ORA-06512: at line 2
      

  3.   

    嗯,解决了,谢谢热心的楼上各位。
    把我解决这个问题的资料贴上来分享一下吧。终于找到毛病了,原来是没有权限。虽然当前用户执行语句是有权限的,但是放到存储过程中就必须要显式的赋个权限给当前用户。以下是我找到的资料,贴出来给大家也看一下吧。
    =====================
    【IT168 技术文档】我们知道,用户拥有的role权限在存储过程是不可用的。如:    SQL> select * from dba_role_privs where grantee='SUK';  GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
      ------------ ------------ ------------ ------------
      SUK DBA NO YES
      SUK CONNECT NO YES
      SUK RESOURCE NO YES  --用户SUK拥有DBA这个role  --再创建一个测试存储过程:
      create or replace procedure p_create_table  
      is
      begin
      Execute Immediate 'create table create_table(id int)';
      end p_create_table;  --然后测试
      SQL> exec p_create_table;  begin p_create_table; end;  ORA-01031: 权限不足
      ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
      ORA-06512: 在line 1  --可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。
      --遇到这种情况,我们一般需要显式进行系统权限,如grant create table to suk;
      --但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
      --实际上,oracle给我们提供了在存储过程中使用role权限的方法:
      --修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
      create or replace procedure p_create_table  
      Authid Current_User is
      begin
      Execute Immediate 'create table create_table(id int)';
      end p_create_table;  --再尝试执行:
      SQL> exec p_create_table;  PL/SQL procedure successfully completed  --已经可以执行了。