2011-01-05 19 views
12

sqliteトリガで/ case/when文がサポートされている場合は条件付きですか?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; 

しかし、それは句IF任意のを許可していませんSQLiteのトリガのための構文図のように、構文エラーで構文エラーSqlite error near 'IF': syntax error"

答えて

31

を上昇:

Let`sは、私は次のセットアップを持っていると言いますまた、CASE WHENの構造もありません。

しかし、あなたはあなたがこのようなあなたのDELETEの場合のトリガーに作成することになりhttp://sqlite.org/lang_createtrigger.html

を参照してください、WHEN条件を使用して二、三のトリガーを定義することによって、同じ効果を得ることができます。

CREATE TRIGGER delete_from_other_table AFTER INSERT ON someTable 
WHEN new.someValue = 0 
BEGIN 
    DELETE FROM anotherTable WHERE (... some condition); 
END; 

そして、適切な条件でINSERTとUPDATEのケースの別のトリガーを追加するよりも...

CREATE TRIGGER update_another_table AFTER INSERT ON someTable 
WHEN new.someValue <> 0 
BEGIN 
    ... 
END;