我需要在执行脚本中的一些请求之前停用触发器:
DECLARE
CPM_ID PLS_INTEGER;
CPM_ID_TO_DELETE PLS_INTEGER;
BEGIN
BEGIN
SELECT ID INTO CPM_ID_TO_DELETE FROM CPM_T WHERE TITLE LIKE '%My Contract%';
DELETE CPM_HIST_T WHERE HIST_ID = CPM_ID_TO_DELETE;
-- Deactivate the trigger
EXECUTE IMMEDIATE 'ALTER TRIGGER CPM_HIST_ID_TRIG DISABLE';
DELETE CPM_T WHERE ID = CPM_ID_TO_DELETE;
-- Activate the trigger
EXECUTE IMMEDIATE 'ALTER TRIGGER CPM_HIST_ID_TRIG ENABLE';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
CPM_ID := CPM_ID_SEQ.nextval;
Insert into CPM_T (ID,ORG_ID,TITLE) values (CPM_ID,'7257','My Contract');
END;
然而,它不工作,我得到这个错误:“通常是PL/SQL编译错误- ORA-06550”
我无法执行命令“ALTER......”。
你能帮我解决这个问题吗?
2条答案
按热度按时间kiayqfof1#
“通常”是什么意思有时,但不总是?因为,您发布的代码看起来很好,并且不会在我的测试用例中引发错误。
示例对象:
您的代码(转换为过程;我什么都没改):
测试:
所以,没什么问题。
您能否发布自己的SQL*Plus会话来说明问题?
8fq7wneg2#
您的代码似乎可以正常工作(如果您使用SQL*Plus、SQL Developer等)。然后你需要在PL/SQL块的末尾的新行上添加一个PL/SQL终止符
/
)。你可以(取决于你的触发器做什么)重写它:
fiddle