1
問題:sqlite3_execでこれを実行すると、SQLiteは "DEFAULTに近い:構文エラー"を発生します。挿入はトリガの外側でうまく動作し、他のステートメントはトリガ内で動作しますが、何らかの理由でDEFAULT VALUESはトリガ内で動作しません。なぜこうなった?SQLiteの構文エラー:トリガーの間にデフォルト値を挿入した後に
のSQLiteコード:
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;
トリガが自動的にそのようなプロセス、内部「無名の」リソースを生成することによって、挿入Named_Process_Definitionsを簡素化することを意味します。
を挿入することによって、この問題を回避することができますROWIDを挿入後に有効ですか?つまり、Named_Process_Definition.Nameをトリガーに設定できますか? – Andreas
@Andreas [documentation](http://www.sqlite.org/lang_createtrigger.html)は、 'rowid' valusがいつ有効かを示します。 –