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有效。 –