在sqlite触发器中的条件插入语句
问题描述:
如果在sqlite触发器中支持/ case/when语句,是否有条件?在sqlite触发器中的条件插入语句
突然想到说,我有以下设置:
CREATE TABLE someTable (id INTEGER PRIMARY KEY, someValue INTEGER);
CREATE TRIGGER update_another_table AFTER INSERT ON someTable
BEGIN
IF(new.someValue==0)
DELETE FROM another_table WHERE (...some condition);
ELSE
IF NOT EXISTS(SELECT anotherValue FROM another_table WHERE anotherValue =new.someValue)
INSERT INTO another_table VALUES(new.someValue, ...);
ELSE
UPDATE another_table SET anotherValue = new.someValue;
END;
但它上升一个语法错误Sqlite error near 'IF': syntax error"
答
这是一个语法错误的语法图SQLite的触发器不允许任何if引导的从句也不是CASE WHEN结构。
但你可以通过定义使用WHEN条件的两个或三个触发器达到同样的效果,看到http://sqlite.org/lang_createtrigger.html
所以,你会创建触发器的DELETE情况是这样的:
CREATE TRIGGER delete_from_other_table AFTER INSERT ON someTable
WHEN new.someValue = 0
BEGIN
DELETE FROM anotherTable WHERE (... some condition);
END;
而且比为INSERT和UPDATE Case添加另一个触发器以适当的条件...
CREATE TRIGGER update_another_table AFTER INSERT ON someTable
WHEN new.someValue <> 0
BEGIN
...
END;