共计 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 行业资讯频道。