触发后插入默认值的SQLite语法错误

时间:2017-10-08 11:34:18

标签: sqlite triggers

问题:当通过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。

1 个答案:

答案 0 :(得分:1)

sqlite docs州:

  

" 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;