ORA

54次阅读
没有评论

共计 1106 个字符,预计需要花费 3 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关 ORA-06512 问题解决是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在执行存储过程时,有动态执行 SQL 时,有时报错 ORA-06512。

SQL  select * from dba_role_privs where grantee= dev
 
 GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
 ———— ———— ———— ————
 DEV CONNECT NO YES
 DEV RESOURCE NO YES
 
 – 再创建一个测试存储过程:
 create or replace procedure p_create_table 
 is
 begin
 Execute Immediate  create table test(id int)
 end p_create_table;
 
 – 然后测试
 SQL  exec p_create_table;
 
 begin p_create_table; end;
 
 ORA-01031:  权限不足
 ORA-06512:  在 DEV.P_CREATE_TABLE , line 3
 ORA-06512:  在 line 1
 
 – 可以看到,即使拥有 CONNECT,RESOURCE role,也不能创建表。role 在存储过程中不可用。
 – 遇到这种情况,我们一般需要显式进行系统权限,如 grant create table to DEV;
 – 但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
 – 实际上,oracle 给我们提供了在存储过程中使用 role 权限的方法:
 – 修改存储过程,加入 Authid Current_User 时存储过程可以使用 role 权限。
 create or replace procedure p_create_table 
 Authid Current_User is
 begin
 Execute Immediate  create table test(id int)
 end p_create_table;
 
 – 再尝试执行:
 SQL  exec p_create_table;
 
 PL/SQL procedure successfully completed
 
 – 已经可以执行了。

上述就是丸趣 TV 小编为大家分享的 ORA-06512 问题解决是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计1106字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)