共計 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 行業資訊頻道。