【发布时间】:2018-06-07 19:30:59
【问题描述】:
我正在尝试在 SQLite 数据库中创建某些内容的日志。我正在使用触发器执行此操作,但我需要插入多个日志记录,并且它们都需要具有相同的时间戳。为了做到这一点,我尝试使用WITH 子句来获取当前时间戳,然后我可以在多个地方使用它。
我的陈述看起来像这样:
CREATE TRIGGER test7_INSERT AFTER INSERT ON test7
BEGIN
WITH t(t) AS (
SELECT CAST((julianday('now') - 2440587.5)*86400000
AS INTEGER)
)
INSERT INTO ChangeLog (t, rowid, field, value)
VALUES
(t.t, 1, 'field1', new.field1),
(t.t, 1, 'field2', new.field2),
(t.t, 1, 'field3', new.field3);
END;
但是当我尝试运行此语句时,我在“INSERT”附近收到语法错误。我已重命名其他 INSERT 以将其隔离到触发器本身内的 INSERT 语句。一切都在触发器之外工作,当我查阅TRIGGER 上的 SQLite 文档时,我注意到触发器内只允许更新、插入、删除和选择语句 - 显然省略了 WITH 子句。
我怎样才能达到同样的效果,以便我可以在查询的多个地方重复使用相同的时间戳值?
【问题讨论】:
-
我相信 WITH 使用 CTE(公用表表达式)并且 TRIGGER 包括 触发器内的语句不支持公用表表达式。
-
部分
CTE可以通过“附加/外部”CTE-view在trigger中获得:)
标签: sqlite