1
在我的PLSQL函数中,为了将日志记录到日志表,我正在调用一个过程(它包含commit语句)。因此,我宣布它作为PLSQL:ORA-14552无法执行DDL,提交
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,但即使我我交给它作为附注AUTONOMOUS_TRANSACTION到避免那个错误,我仍然得到相同的错误。任何想法我做错了什么?请指教。
谢谢你的回应。我应该不是在我的函数里面使用drop table吗?你能建议最好的方法吗 – Karthik
没错。不要在FUNCTION的上下文中执行DDL操作。你已经想出了如何使用自主事务进行提交。你可以用DROP TABLE做同样的事情。将其放入PROCEDURE中,并从FUNCTION调用该过程。 – spencer7593
非常感谢:)请试试 – Karthik