Я хочу получить последний вставленный идентификатор каждого канала из таблицы журналов, а затем записать его в другую таблицу. Для этого я написал триггер в таблице журналов, но он не работает из-за синтаксической ошибки.Sqlite trigger с оператором «case when»
Синтаксис используемый для случая, точно как Sqlite ссылка.
CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END
CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 END
Мой код:
CREATE TRIGGER ChnState_log AFTER INSERT
ON CallLog
BEGIN
CASE NEW.Dir
WHEN 0
BEGIN
CASE
WHEN 0=(SELECT Id FROM ChnStatus WHERE No = NEW.SrcNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt0", NEW.ID);
END;
WHEN 1=(SELECT Id FROM ChnStatus WHERE No = NEW.SrcNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt1", NEW.ID);
END;
WHEN 2=(SELECT Id FROM ChnStatus WHERE No = NEW.SrcNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt2", NEW.ID);
END;
WHEN 3=(SELECT Id FROM ChnStatus WHERE No = NEW.SrcNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt3", NEW.ID);
END;
END;
END;
WHEN 1
BEGIN
CASE
WHEN 0=(SELECT Id FROM ChnStatus WHERE No = NEW.DestNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt0", NEW.ID);
END;
WHEN 1=(SELECT Id FROM ChnStatus WHERE No = NEW.DestNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt1", NEW.ID);
END;
WHEN 2=(SELECT Id FROM ChnStatus WHERE No = NEW.DestNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt2", NEW.ID);
END;
WHEN 3=(SELECT Id FROM ChnStatus WHERE No = NEW.DestNo)
BEGIN
INSERT INTO Setting(Name, Value) VALUES ("LstChnSt3", NEW.ID);
END;
END;
END;
END;
END;
Я не уверен, является ли это ответом, поскольку кажется слишком очевидным ... слово WHERE is misspelt в каждом подзапросе. – Brendan
Вы правы. я исправлю это – Razavi
Я добавлю это как ответ тогда - было бы полезно, если бы вы отметили его как правильный. Рад, что вы отсортированы. – Brendan