我正在尝试创建以下触发器,但它说:
创建触发器时出错:接近“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”附近有什么问题请帮帮我。
答案 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;