1. 程式人生 > >oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題

oracle儲存過程中使用execute immediate執行sql報ora-01031許可權不足的問題

--問題描述:
 使用者在儲存過程中呼叫execute immediate 執行 create table語句報錯 ORA-01031,
 並且反映直接執行該語句無報錯。


--原因
根據問題可以發現使用者確實有create table的許可權,
查詢dba_role_privs 和 dba_sys_privs 發現使用者有 resource許可權,但並無顯示的 create table許可權。
在儲存過程中呼叫execute immediate執行sql語句,則使用者必須有顯示的賦權,而使用者的角色許可權在這裡不起作用。
所以會報 ora-01031 錯誤。


--解決
1、可以顯示的賦給使用者 create table許可權
grant create table to user;


2、可以在儲存過程上使用呼叫者許可權。
CREATE OR REPLACE PROCEDURE test_proc 
(a NUMBER, 
 b VARCHAR 

 ) AUTHID CURRENT_USER IS

轉自:https://blog.csdn.net/royzhang7/article/details/51172413