使用存储过程用execute immediateSQL报ORA-01031错误问题的解决
来源:互联网 发布:喷淋塔计算软件 编辑:程序博客网 时间:2024/05/16 08:28
使用存储过程用execute immediateSQL报ORA-01031错误问题的解决
2010年12月3日
14:09
- 遇到的问题及情况说明
用normal用户登录时,在执行到execute immediate s;时会出错:报:ORA-01031:insufficient privileges权限不足 错误,用sys,DBA登录时则不会出错。
代码如下:
- 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);
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;
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;
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 TABLEto users;
如此即可不添加Authid Current_User。
有不对的地方,还请指正。
- 使用存储过程用execute immediateSQL报ORA-01031错误问题的解决
- oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题
- oracle 存储过程 execute immediate 'create table' 报 insufficient privileges错误解决及用户权限的理解-开发系列(二)
- oracle-存储过程提示ORA-01031: 权限不足错误解决
- ORACLE存储过程运行报“ora-00942表或视图不存在”、“ORA-01031:权限不足”的解决方式
- 存储过程结合游标的使用错误--------ORA-01403
- 调用存储过程报错 ORA-01031
- 一次ora-12560错误的解决过程!
- ORA-01940错误的解决过程
- ORA-600(17069)错误的解决过程
- ORA-01589错误的解决过程
- ORA-08103错误的解决过程
- Oracle中ORA-06508错误解决,触发器调用存储过程
- 解决在Oracle12c中通过SQL Developer工具debug存储过程时的错误: ORA-24247
- 解决在Oracle12c中通过SQL Developer工具debug存储过程时的错误: ORA-24247
- ora-00201,ora-00202错误的解决过程
- 已解决:expdp导出带有lob字段的表,报ORA-01555错误的问题
- 存储过程中调用EXECUTE IMMEDIATE的“权限不足”问题
- android Toast大全(五种情形)建立属于你自己的Toast
- 微软建议用户卸载Java JRE存在严重安全隐患
- 硬盘与硬件管理笔记---鸟哥的私房菜
- eclipse(jee) 、 tomcat7 开发 servlet
- 引用 JAVA中浅复制与深复制
- 使用存储过程用execute immediateSQL报ORA-01031错误问题的解决
- Hyginex:利用腕带震动提醒医护人员及时洗手
- struts2中常用Result类型的用法
- Visual Studio 用正则表达式查找替换
- 常用的CSS 属性
- C#字符串
- hdoj 3681 Prison Break
- 图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》
- XMLHttpRequest 对象与属性