仅在更新的列具有不同的值时触发

时间:2018-07-24 06:38:39

标签: sql derby

我有一个表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时使用异常来停止触发器,但是我不确定如何执行此操作,或者不确定是否被认为是不好的做法。

1 个答案:

答案 0 :(得分:0)

通过选择插入:

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;