如果插入的年龄为负数,我会尝试将年龄设置为0。我不知道代码出了什么问题:
CREATE TRIGGER verify_age BEFORE INSERT ON customers FOR EACH ROW WHEN (NEW.age < 0) BEGIN UPDATE customers SET age = 0 END;
bnlyeluc1#
代码中的语法错误是它在END之前缺少;,但是即使您纠正了这个错误,它也不会解决您的问题。您需要在UPDATE语句中使用WHERE子句,以便只更新新行,而不更新整个表。WHERE子句中的条件将检查新行的rowid,但此rowid仅在插入*行之后存在。因此,您必须将触发器更改为AFTER INSERT触发器:
END
;
UPDATE
WHERE
rowid
AFTER INSERT
CREATE TRIGGER verify_age AFTER INSERT ON customers WHEN NEW.age < 0 BEGIN UPDATE customers SET age = 0 WHERE rowid = NEW.rowid; END;
请参阅demo。
rhfm7lfc2#
试试这个:
CREATE OR REPLACE TRIGGER validate_age BEFORE INSERT ON customers FOR EACH ROW BEGIN IF :new.age < 0 THEN :new.age := 0; END IF; END;
或者:
CREATE TRIGGER validate_age BEFORE INSERT ON customers BEGIN SELECT CASE WHEN NEW.age < 0 THEN NEW.age = 0 END; END;
2条答案
按热度按时间bnlyeluc1#
代码中的语法错误是它在
END
之前缺少;
,但是即使您纠正了这个错误,它也不会解决您的问题。您需要在
UPDATE
语句中使用WHERE
子句,以便只更新新行,而不更新整个表。WHERE
子句中的条件将检查新行的rowid
,但此rowid
仅在插入*行之后存在。因此,您必须将触发器更改为
AFTER INSERT
触发器:请参阅demo。
rhfm7lfc2#
试试这个:
或者: