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
.
的上下文中执行的正文
在我的 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
.