使用存储过程用execute immediateSQL报ORA-01031错误问题的解决

使用存储过程用execute immediateSQLORA-01031错误问题的解决

2010123

14:09

  1. 遇到的问题及情况说明

 

  用normal用户登录时,在执行到 execute immediate s;时会出错:报:ORA-01031insufficient privileges 权限不足 错误,用sysDBA登录时则不会出错。

 

代码如下:

create or replace procedure proc1
 (dno in number)
 is
 s varchar2(2000);
 begin
 s:='create table is_table
 (ids number)';
 dbms_output.put_line(s);
 execute immediate s;
end proc1;
 
call proc1(20);
 

 

2、解决过程

 

网友说的解决方法:

create or replace procedure p_create_table
    Authid Current_User is--加上Authid Current_User即可。
    begin
    Execute Immediate 'create table create_table(id int)';
end p_create_table;
 

 

经在oracle10g/plsql7下验证成功。

 

3、原理探寻

 使用PLSQL Develeper可以发现Oracle对用户的授权分为五方面的权限,即:

一般权限:用于登录数据库

对象权限:用于给用户针对对象使用进行授权,以上的问题就是因为没有给对象授权造成。

角色权限:即操纵数据库的权限。

系统权限:管理oracle数据库运行的权限。

空间限额:限制用户空间大小。

 

4、总结:

 

  造成这个问题的原因在于用户的权限受到了限制。所以,按照这个逻辑,可以通过授权来解决此问题,即:

grant    
  CREATE SESSION,
    CREATE ANY TABLE,
    CREATE ANY VIEW ,
    CREATE ANY INDEX,
    CREATE ANY PROCEDURE,
    CREATE ANY TABLE
     ALTER ANY TABLE,
    ALTER ANY PROCEDURE,  
  DROP ANY TABLE,
    DROP ANY VIEW,
    DROP ANY INDEX,
    DROP ANY PROCEDURE,
  SELECT ANY TABLE,
    INSERT ANY TABLE,
    UPDATE ANY TABLE,
    DELETE ANY TABLE
to users;
 

如此即可不添加Authid Current_User

 

有不对的地方,还请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值