2011-01-05 18 views
12

Le istruzioni condizionali if/case/when sono supportate nei trigger sqlite?istruzione di inserimento condizionale nei trigger sqlite

Let`s dire che ho la seguente configurazione:

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; 

Ma sorge un errore di sintassi Sqlite error near 'IF': syntax error"

risposta

31

Questo è un errore di sintassi, come diagramma di sintassi per SQLite Trigger non consente alcuna SE clausole né CASE QUANDO le costruzioni.

Ma è possibile ottenere lo stesso effetto attraverso la definizione di due o tre trigger che utilizzano la condizione in cui, vedi http://sqlite.org/lang_createtrigger.html

Così si creerebbe sul grilletto per il vostro caso DELETE in questo modo:

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

E di aggiungere un altro trigger per il caso INSERT e UPDATE con le condizioni appropriate ...

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