ORA-06512 問題解決是怎樣的呢
這期內容當中小編將會給大家帶來有關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
--已經可以執行了。
上述就是小編為大家分享的ORA-06512 問題解決是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。