【发布时间】:2016-05-31 06:15:42
【问题描述】:
这是在 Oracle 11 上完成的,我正在尝试创建一个触发器,如果传入满足某些值,则更新另一个表。
--CREATE TRIGGER ON ITX
CREATE OR REPLACE TRIGGER TRG_I_LAST_RECEIVED
AFTER INSERT ON ITEM_TRANSACTION_LOG
FOR EACH ROW
WHEN (
NEW.ITEM_CONDITION_ID = 5005 -- REPAIRED
AND NEW.WORKCENTER_ID IN (5001,5006,5063,5000,5022,5062) -- EWRC
AND NEW.ORDER_ITEM_OPER_ID = 5009 -- Perform Exit Routing
)
BEGIN
UPDATE PART
SET LAST_REPAIRED = SYSDATE
WHERE PART_NO = :NEW.ITEM_PART_NO
END;
当我这样做时,它会添加它,但我得到了这个 (ORA-24344):
现在,我对 SQL (T-SQL) 的理解相当好,但也许我遗漏了一些东西 - 有人能看一下这个并告诉我为什么它无效吗?
编辑: 该问题在更新语句的末尾缺少分号。 Oracle 的分号差异有时让我发疯。
这是正确的陈述,感谢 Justin Cave 找到它:
--CREATE TRIGGER ON ITX
CREATE OR REPLACE TRIGGER TRG_I_LAST_RECEIVED
AFTER INSERT ON ITEM_TRANSACTION_LOG
FOR EACH ROW
WHEN (
NEW.ITEM_CONDITION_ID = 5005 -- REPAIRED
AND NEW.WORKCENTER_ID IN (5001,5006,5063,5000,5022,5062) -- EWRC
AND NEW.ORDER_ITEM_OPER_ID = 5009 -- Perform Exit Routing
)
BEGIN
UPDATE PART
SET LAST_REPAIRED = SYSDATE
WHERE PART_NO = :NEW.ITEM_PART_NO; --add that semicolon!
END;
【问题讨论】:
-
show error(假设您使用的是 SQL*Plus)向您表明实际的编译错误是什么?没有什么能在我身上跳出来。 -
不幸的是,我现在正在回家的火车上。我回家后可以看看它,并且可以 VPN 进入。
-
第二遍时,您在
update语句的末尾缺少分号。可能还有其他编译错误。 -
谢谢。我回家后会试试的。如果您将其作为答案提交,这就是问题所在,我会将您的答案标记为正确答案
-
如果这就是
show errors显示的错误,我会将其作为答案发布。我不喜欢在没有看到实际错误的情况下将其发布为答案,因为编译器完全有可能发现我没有发现的错误。