2014-01-22 3 views
0

Я хочу получить последний вставленный идентификатор каждого канала из таблицы журналов, а затем записать его в другую таблицу. Для этого я написал триггер в таблице журналов, но он не работает из-за синтаксической ошибки.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; 
+0

Я не уверен, является ли это ответом, поскольку кажется слишком очевидным ... слово WHERE is misspelt в каждом подзапросе. – Brendan

+0

Вы правы. я исправлю это – Razavi

+0

Я добавлю это как ответ тогда - было бы полезно, если бы вы отметили его как правильный. Рад, что вы отсортированы. – Brendan

ответ

1

Выражение СЛУЧАЯ может быть использовано только для выбора между другими выражениями, а не для высказывания типа INSERT.

Предложение WHEN инструкции CREATE TRIGGER часто помогает. Для чего-либо еще, вы должны поставить логику внутри фактических утверждений, например:

CREATE TRIGGER ChnState_log_src 
AFTER INSERT ON CallLog 
FOR EACH ROW 
WHEN NEW.Dir = 0 
BEGIN 
    INSERT INTO Setting(Name, Value) 
    VALUES('LstChnSt' || (SELECT Id 
          FROM ChnStatus 
          WHERE No = NEW.SrcNo), 
      NEW.ID); 
END; 

CREATE TRIGGER ChnState_log_dest 
AFTER INSERT ON CallLog 
FOR EACH ROW 
WHEN NEW.Dir = 1 
BEGIN 
    INSERT INTO Setting(Name, Value) 
    VALUES('LstChnSt' || (SELECT Id 
          FROM ChnStatus 
          WHERE No = NEW.DestNo), 
      NEW.ID); 
END; 
0

Я не уверен, если это ответ, как это кажется слишком очевидным ... слово ГДЕ орфографические ошибки в каждом sub-query

Смежные вопросы