執行存儲過程執行時,報ORA-01031權限不足

在oracle存儲過程中,默認是可以直接執行DML和DQL的,但是執行create 或者 drop 這種的DDL則需要藉助EXECUTE IMMEDIATE ···
如下備份表語句

  --按年備份
  SELECT TO_CHAR(SYSDATE, 'YYYY') INTO V_N FROM DUAL;
  V_CREATESQL := 'CREATE TABLE TEXT_' || V_N ||
                 '_T AS SELECT * FROM TEXT';
  EXECUTE IMMEDIATE V_CREATESQL;

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

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

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

grant CREATE TABLE to [username];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章