1
問題:SQLite在通過sqlite3_exec運行時產生「接近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 [文檔](http://www.sqlite.org/lang_createtrigger.html)告訴你何時'rowid' valus有效。 –