執行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:用戶名