在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;