Oracle執行存儲過程報錯——ora-01031:權限不足


執行DDL報錯

在oracle存儲過程中,默認是可以直接執行DML和DQL的,但是執行CREATE這種的DDL則需要借助EXECUTE IMMEDIATE 

如:

create or replace procedure CREATE_TABLE(CREATE_SQL VARCHAR2) IS
BEGIN
  EXECUTE IMMEDIATE CREATE_SQL; --'CREATE TABLE T_CREATE_TABLE_1(COLUMN_1 VARCHAR2(50))'
end CREATE_TABLE;

當執行該語句時,提示 ORA-01031: 權限不足。該用戶已賦予DBA權限。

原因:CREATE TABLE想使用CREATE ANY TABLE權限,而CREATE ANY TABLE權限來自DBA角色,默認情況下,雖然在會話環境中可見,但在存儲過程中不可見(無效)。

即:ORACLE默認為定義者權限,定義者權限在存儲過程中ROLE無效,需要顯式授權

GRANT CREATE ANY TABLE TO shfdfm
shfdfm:用戶名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM