PLSQL: ORA-14552 无法执行 DDL,提交

PLSQL: ORA-14552 Cannot perform DDL, Commit

在我的 PLSQL 函数中,为了将记录器写入日志 table,我正在调用一个过程(其中包含提交语句)。所以我将其声明为

CREATE OR REPLACE PROCEDURE PR_LOGGER
( IN PARAMETERS-----)
IS Pragma Autonomous_transaction
BEGIN

--Insert statements

Commit;
END;

调用函数:

CREATE OR REPLACE FUNCTION MYFUNCTION
( --IN PARAMETERS )
BEGIN

---Some select statements
PR_LOGGER(logmessage);
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE tablename';
EXCEPTION WHEN OTHERS
   IF (SQLCODE !=942 ) THEN
   PR_LOGGER(SQLERRM);
   END IF;
END;
return NULL;
END;

所以我知道如果调用过程或函数包含提交,我将得到 ORA-14552,但即使我将其作为 Pragma Autonomous_transaction 处理以避免该错误,我仍然遇到相同的错误。知道我做错了什么吗?请指教

DROP TABLE 语句导致隐式提交。

PRAGMA只适用于PROCEDURE的执行。

DROP TABLE 未在过程的上下文中执行。那是在 FUNCTION.

的上下文中执行的正文