2011-01-05 1 views
12

Являются условными, если/case/when заявления поддерживаются в sqlite триггерах?условная инструкция insert в 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"

ответ

31

То есть ошибка синтаксиса в синтаксической диаграмме для SQLite триггеров не позволяет ни IF статей а также конструкции CASE WHEN.

Но вы можете достичь того же эффекта путем определения двух или трех триггеров, которые используют при выполнении условия, см http://sqlite.org/lang_createtrigger.html

Таким образом, вы бы создать на спусковой крючок для УДАЛИТЬ случае, как это:

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; 
Смежные вопросы