問題描述:在開發存過的時候,PL/SQL塊裏有動態SQL語句,正常可以執行。
但是放到存儲過程裏會報ORA-01031:insufficient privileges錯誤。
經查詢原因是塊裏具有動態SQL語句( execute immediate SQL),
而且動態SQL語句只能通過對象賦權(例:CREATE TABLE),不識別角色賦權(例:DBA)。
解決方法:1.建立存過時加入 ’AUTHID current_user‘關鍵字,賦予存過調用者權限。
備註:對於pl/sql子程序的調用來說,具有兩種方式:定義者權限和調用者權限。
2.顯示賦權。
該存過下動態執行的SQL語句涉及到建立表、刪除表數據等操作需要顯示賦權(即直接將對象賦給該用戶,而不是將
角色賦給該用戶)。
而通過第一種方法解決後,雖然存過可以正常運行,但是放到定時任務(job)裏還是會報權限不足的錯誤,此時用第二種方法解決即可