【问题标题】:Trigger only when updated column has a different value仅当更新的列具有不同的值时触发
【发布时间】:2018-07-24 06:38:38
【问题描述】:

我有一个表 PERSON,其中包含 LAST_VISIT 列(以及其他列)。我正在尝试创建一个触发器,以便在更新 PERSON 并且 仅当 LAST_VISIT 更改 从以前的值时,我将一行插入到另一个表中。这可能吗?我试过的:

CREATE TRIGGER on_last_visit_changed
    AFTER UPDATE ON PERSON
    REFERENCING OLD AS OLD NEW AS NEW
    FOR EACH ROW MODE DB2SQL
    INSERT INTO
        ALERT (
            TYPE,
            ENTITY_ID
        )
        VALUES
        (
            'LAST_VISIT_ALERT',
            OLD.ID,
        )
    WHERE OLD.LAST_VISIT !=  NEW.LAST_VISIT;

但我得到一个语法错误:

Syntax error: Encountered "WHERE"

我猜这是有道理的,因为trigger syntax 似乎不允许这样做。有不同的方法可以做到这一点吗?我正在考虑在不满足条件 OLD.LAST_VISIT != NEW.LAST_VISIT 时使用异常来停止触发器,但我不确定如何执行此操作,或者这是否被认为是不好的做法。

【问题讨论】:

标签: sql derby


【解决方案1】:

从选择中插入:

CREATE TRIGGER on_last_visit_changed
AFTER UPDATE ON PERSON
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW MODE DB2SQL
INSERT INTO ALERT (
    TYPE,
    ENTITY_ID
)
SELECT
    'LAST_VISIT_ALERT',
    OLD.ID
FROM DUAL
WHERE OLD.LAST_VISIT !=  NEW.LAST_VISIT;

【讨论】:

  • 我收到Syntax error: Encountered "IF"。请注意,我使用的是 derby DB(已标记)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多