SQLite3在BEGIN&之间的触发器中使用条件结束

时间:2014-05-15 04:50:07

标签: android triggers sqlite

我正在尝试创建以下触发器,但它说:

  

创建触发器时出错:接近“INSERT”:语法错误无法执行语句。

CREATE TRIGGER trig2
   AFTER 
   UPDATE OF flag
   ON table1
   FOR EACH ROW 
BEGIN
    SELECT CASE flag
    WHEN 1 THEN 
        INSERT OR IGNORE INTO stats VALUES(NEW.id,CURRENT_DATE,0);
    ELSE
        DELETE FROM stats WHERE app_id=NEW.id AND ondate=CURRENT_DATE and runtime=0;
    END;
END;

我想做的是:

  • table1中的flag=1
    如果相同 ID ondate 的记录不存在,则统计信息中插入新行

  • flag=0
    时 使用以下约束从统计信息中删除记录
    WHERE app_id=NEW.id AND ondate=CURRENT_DATE and runtime=0;

我无法弄清楚“INSERT”附近有什么问题请帮帮我。

1 个答案:

答案 0 :(得分:3)

根据SQLite触发器的Syntax Diagram,这是一个语法错误,我们在 BEGIN <之间不能有任何 IF CASE 子句/ strong>和结束

所以你应该为不同的操作创建 两个触发器 ,如下所示:

1)对于删除案例

CREATE TRIGGER trig1
   AFTER 
   UPDATE OF flag
   ON table1
   FOR EACH ROW 
   WHEN NEW.flag=0
  BEGIN
     DELETE FROM stats WHERE app_id=NEW.id AND ondate=CURRENT_DATE and runtime=0;
  END;

2)对于插入案例

CREATE TRIGGER trig2
   AFTER 
   UPDATE OF flag
   ON table1
   FOR EACH ROW 
   WHEN NEW.flag=1
 BEGIN     
    INSERT OR IGNORE INTO stats VALUES(NEW.id,CURRENT_DATE,0);  
 END;