2017-10-08 2 views
1

Das Problem: SQLite ergibt "near DEFAULT: syntax error", wenn sqlite3_exec ausgeführt wird. Die Einfügung funktioniert gut außerhalb des Triggers und andere Anweisungen funktionieren innerhalb des Triggers, aber irgendwie funktionieren die DEFAULT VALUES nicht innerhalb des Triggers. Warum passiert dies?SQLite-Syntaxfehler beim Einfügen des Standardwerts während des Triggers nach

SQLite Code:

CREATE TABLE Symbol (
    Label VARCHAR(127) PRIMARY KEY 
); 
CREATE TABLE Process (
    Name INTEGER PRIMARY KEY 
); 
CREATE TABLE Named_Process_Definition (
    Label VARCHAR(127), 
    Name INTEGER, 
    FOREIGN KEY (Label) REFERENCES Symbol (Label), 
    FOREIGN KEY (Name) REFERENCES Process_Definition (Name) 
); 
CREATE TRIGGER pre_new_named_process BEFORE INSERT ON Named_Process_Definition 
    BEGIN 
    INSERT INTO Symbol (Label) VALUES (NEW.Label); 
    END; 
CREATE TRIGGER post_new_named_process AFTER INSERT ON Named_Process_Definition 
    BEGIN 
    INSERT INTO Process DEFAULT VALUES; 
    UPDATE Named_Process_Definition SET Name=last_insert_rowid() WHERE rowid=NEW.rowid; 
    END; 

Die Trigger gemeint sind, indem sie automatisch Erzeugen von internen "unnamed" Ressourcen wie Prozess zu vereinfachen Named_Process_Definitions Einsetzen.

Antwort

1

sqlite docs Zustand:

Die "INSERT INTO Tabelle STANDARDWERTE" Form der INSERT-Anweisung wird nicht unterstützt.

Sie können durch Einfügen eines Null dieses Problem umgehen, z.B .:

CREATE TRIGGER post_new_named_process AFTER INSERT ON Named_Process_Definition 
    BEGIN 
    INSERT INTO Process(rowid) VALUES(NULL); 
    END; 
+0

einige Code verschossen, festhalten und Aktualisierung dieser ... Ist das Rowid gültig nach dem Einsetzen? Das heißt, kann ich den Named_Process_Definition.Name darauf im Trigger setzen? – Andreas

+0

@Andreas Die [Dokumentation] (http://www.sqlite.org/lang_createtrigger.html) sagt Ihnen, wann der value "rowid" gültig ist. –

Verwandte Themen