问题:当通过sqlite3_exec运行时,SQLite会产生“接近DEFAULT:语法错误”。插入在触发器外部工作正常,其他语句在触发器内部工作,但不知何故,DEFAULT VALUES在触发器内部不起作用。为什么会这样?
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;
触发器旨在通过自动生成内部“未命名”资源(如Process)来简化插入Named_Process_Definitions。
答案 0 :(得分:1)
" INSERT INTO表DEFAULT VALUES"不支持INSERT语句的形式。
您可以通过插入null来解决此问题,例如:
CREATE TRIGGER post_new_named_process AFTER INSERT ON Named_Process_Definition
BEGIN
INSERT INTO Process(rowid) VALUES(NULL);
END;