如何在 SQLite 触发器中使用 WITH 子句

2023-12-21

我正在尝试在 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 语句隔离。一切都在触发器之外工作,当我查阅 SQLite 文档时TRIGGER https://sqlite.org/lang_createtrigger.html,我注意到触发器内只允许更新、插入、删除和选择语句——显然省略了WITH子句。

如何才能达到相同的效果,以便可以在查询中的多个位置重用相同的时间戳值?


我会将其重写为:

INSERT INTO ChangeLog (t, rowid, field, value)
SELECT ":1", ":2", ":3",CAST((julianday('now') - 2440587.5)*86400000  AS INTEGER)
FROM (VALUES
(t.t, 1, 'field1', new.field1),
(t.t, 1, 'field2', new.field1),
(t.t, 1, 'field3', new.field1) ) sub;

EDIT:

WITH cte(c1,c2,c3,c4) AS (
  VALUES  (t.t, 1, 'field1', new.field1),
          (t.t, 1, 'field2', new.field1),
          (t.t, 1, 'field3', new.field1) 
)
INSERT INTO ChangeLog (t, rowid, field, value)
SELECT c1,c2,c3, CAST((julianday('now') - 2440587.5)*86400000  AS INTEGER)
FROM cte;

EDIT:

INSERT INTO ChangeLog (t, rowid, field, value)
SELECT c1,c2,c3, CAST((julianday('now') - 2440587.5)*86400000  AS INTEGER)
FROM (
    SELECT t.t AS c1, 1 AS c2, 'field1' AS c3, new.field1 AS c4 UNION ALL
    SELECT t.t AS c1, 1 AS c2, 'field2' AS c3, new.field1 AS c4 UNION ALL
    SELECT t.t AS c1, 1 AS c2, 'field3' AS c3, new.field1 AS c4;
) sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQLite 触发器中使用 WITH 子句 的相关文章

  • SQLite 中的非空字符串约束

    我可以创建数据库约束吗TEXT列于SQLite不允许列的值为空字符串 我想让该专栏成为null 但不允许空字符串 是的你可以 http sqlite org syntaxdiagrams html column constraint sql
  • NuGet安装的Visual Studio 2012中的Sqlite在用于连接的数据源中不存在

    我有 Visual Studio 2012 Premium 并通过 NuGet Packages API 安装了 System Data SQLite x86 x64 我将所有可用的 SQLLite 引用添加到我的 WPF x86 Net
  • 读取 chrome 历史记录时出现数据库文件锁定错误 C#

    我正在开发一个应用程序 它需要 chrome 浏览器历史记录 我编写了一段 C 代码来获取历史记录 但是 我的代码中有两个问题我无法弄清楚 有这个警告 警告 1 正在构建的项目 MSIL 的处理器架构与参考 System Data SQLi
  • 将图像保存和检索到数据库的最佳方法

    寻求上述建议 希望创建一个 SQLite 数据库 其中每行数据主要是字符串 但我也想保存从手机拍摄的图像 是否建议或可能保存位图图像的编码 Base 64 字符串并在调用数据行时将其转换回图像 我还在某处读到有一个 blob 列类型可以保存
  • SQLite:具有四个表的完全外连接

    编辑 可以找到这个问题的扩展here https stackoverflow com questions 47667304 sqlite full outer join with four tables with 30 columns 我想
  • SQLite 查询查找主键

    在 SQLite 中 我可以运行以下查询来获取表中的列列表 PRAGMA table info myTable 这给了我列 但没有关于主键可能是什么的信息 此外 我可以运行以下两个查询来查找索引和外键 PRAGMA index list m
  • Flask 管理数据库连接:内存:

    我有一个烧瓶应用程序 需要存储请求中的一些信息 这些信息的生命周期非常短暂 如果服务器重新启动 我就不再需要它了 所以我真的不需要持久性 我读过了here https stackoverflow com questions 11113903
  • 如果 db 有主字段,如何将 N 个 SQLite 数据库文件合并为一个?

    我有一堆 SQLite 数据库文件 我需要将它们合并成一个大数据库文件 我怎样才能做到这一点 Added 基于this http old nabble com Attempting to merge large databases td18
  • 限制 sqlite 表的最大行数

    我希望实现一种 活动日志 表 其中用户执行的操作存储在 sqlite 表中 然后呈现给用户 以便他们可以看到他们所做的最新活动 然而 自然地 我觉得没有必要保留每一个历史记录 所以我想知道是否有一种方法可以配置表以在达到最大设置限制后开始修
  • 如何在sqlite中创建物化视图?

    我对物化视图和 SQLite 进行了无数次搜索 据我所知 2004 年和 2006 年似乎有人提到 SQLite 没有物化视图 紧随其后的是 SQLite 的变更日志2008年3月 http www sqlite org releaselo
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 如何在首次运行时填充大型 SQLite 数据库

    我正在开发一个基于 SQLite 数据库的字典应用程序 该数据库包含超过 300 000 行 问题在于 最终形式的数据库文件由全文索引表组成 并且重量远远超过150Mb 我通过创建无内容的 fts4 表设法将 db 文件大小降至最低 数据库
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • SQLite-Net 扩展 - GetAllWithChildrenAsync 未提取所有内容

    我正在尝试使用 SQLite Net 扩展来创建关系数据库 我在尝试从数据库中提取 Term 对象时遇到了问题 它成功地撤回了其关联的课程 但未撤回与课程关联的评估和笔记 我不确定问题是否在于如何将对象插入数据库 如何从数据库中提取对象 或

随机推荐

  • 数字格式中的井号?

    NumberFormat nf NumberFormat getCurrencyInstance Locale UK BigDecimal b new BigDecimal 10 System out println String form
  • Pandas One hot 编码:将不太常见的类别捆绑在一起

    我正在对一个分类列进行一次热编码 该列有大约 18 种不同类型的值 我想仅为那些出现超过某个阈值 假设为 1 的值创建新列 并创建另一个名为other values如果值不是那些频繁值 则值为 1 我正在将 Pandas 与 Scikit
  • 在后台运行 Ruby 脚本

    我有一个 Ruby 脚本 需要在我的 Linux 机器上一直运行 我试过nohup ruby ruby rb 但似乎不起作用 如何让脚本在后台运行 看一下screen这是一个命令行实用程序 开始它 screen 您将得到一个分离的新外壳 在
  • 如何使用 GSON 解析嵌套 JSON

    我目前正在使用 volley 发出 get 请求 在 onResponse 中 我尝试使用 gson 将 jsonObject 解析到我的模型 请求后返回的JSON success 1 message Done data company c
  • 是否可以将函数存储在字典中?

    我的 C 应用程序中有一条消息 它是一个序列化为 JSON 的对象 当我反序列化它时 我有一个 名称 string和一个 有效负载 string 我希望能够获取 Name 并在函数字典中查找它 使用 Payload 数组作为其参数 然后将输
  • 如果 pandas dataframe.loc 位置不存在,则返回默认值

    我发现自己经常必须在尝试引用数据帧之前检查数据框中是否存在列或行 例如 我最终添加了很多代码 例如 if mycol in df columns and myindex in df index x df loc myindex mycol
  • 实体框架中可以有没有主键的表吗?

    我只是在练习代码优先新数据库实体框架msdn http msdn microsoft com en us data jj193542 我想知道是否可以在代码中先创建一个没有主键的表新数据库EF EF 可以用数据库做的事情和数据库可以做的事情
  • 为什么 MVC3 没有搭建我的外键列

    我尝试首先使用代码将 MVC 3 与 EF 4 1 结合使用 并遵循 Scott Guthries 教程http weblogs asp net scottgu archive 2011 05 05 ef code first and da
  • 将带有换行符和制表符的 python 字符串转换为字典

    我对我遇到的这个特殊问题有点困惑 我有一个可行的解决方案 但我认为它不太Pythonic 我有一个像这样的原始文本输出 Key 1 Value 1 Key 2 Value 2 Key 3 Value 3a Value 3b Value 3c
  • PHP 以数组形式读取特定的 csv 文件列

    我是 PHP 新手 希望能够读取有两列的 csv 文件 一列是数字 有点像 ID 另一列保存整数值 我查找了 fgetcsv 函数 但无法找到从 csv 文件读取特定列的方法 我想仅从第二列获取所有值 没有标题 有办法做到这一点吗 这是我到
  • Android:单击网页视图中页面中的链接

    我在android web视图中包含了一个web应用程序 并且网页中有一个链接可以打开其他网站 当单击该链接时 第一次单击可以正常工作 但是当第二次单击时 找不到该网站 代码是 Override public boolean shouldO
  • Wix React-native-navigation 更改 Tab 和推屏

    如何同时切换选项卡和推送屏幕 当按钮被按下时 我想切换到另一个选项卡并推送一个新屏幕 是否可以 class Example extends Component buttonHandler gt this props navigator sw
  • Hive 如何存储数据(从 HDFS 加载)?

    我对 Hadoop HDFS 和 Hbase 和 Hadoop 生态系统 Hive Pig Impala 等 相当陌生 我对 Hadoop 组件 例如 NamedNode DataNode Job Tracker Task Tracker
  • 尝试访问EC2实例超时的可能原因

    我无法通过 SSH 连接到我的实例 操作超时 可能的原因是什么 我该如何解决 重新启动通常需要很长时间才能生效 并且可能会让事情变得更糟 更新 这与权限无关 我可以正常登录 我怀疑这可能是因为内存问题 我遇到了同样的问题 解决方案最终是添加
  • 如何让 JUnit 测试等待?

    我有一个JUnit测试 我想同步等待一段时间 我的 JUnit 测试如下所示 Test public void testExipres SomeCacheObject sco new SomeCacheObject sco putWithE
  • x86 内核中的键盘 IRQ

    我正在尝试编写一个非常简单的内核以用于学习目的 在阅读了一堆有关 x86 架构中的 PIC 和 IRQ 的文章后 我已经明白了IRQ1是键盘处理程序 我使用以下代码来打印按下的键 include port io h define IDT S
  • 使用“开始于”目录获取 Windows .lnk 快捷方式的目标

    我正在尝试检索 Windows lnk 快捷方式的目标路径 但根据 lnk 文件的属性 目标 不是实际文件路径 我正在使用 IWshRuntimeLibrary 并且我正在访问的快捷方式对象的类型为 IWshShortcut WshShel
  • Htaccess Apache END 标志替代方案

    我为小型项目编写了一个小型框架 PHP 除了定义的路径外 它应该重定向到index php path 1 有了 END 标志 这就不成问题了 但自 Apache 2 3 以来 END 标志仍然存在 并且该脚本也应该可以在 apache 2
  • 如何在电子邮件中嵌入图像

    我需要在电子邮件中嵌入图像 我该怎么做 我不想使用第三方工具 也不对特定于语言的答案感兴趣 但它是 PHP 以防您想知道 我只对生成的电子邮件正文的格式感兴趣 如您所知 作为电子邮件传递的所有内容都必须文本化 您必须创建包含多部分 mime
  • 如何在 SQLite 触发器中使用 WITH 子句

    我正在尝试在 SQLite 数据库中创建某些内容的日志 我正在使用触发器执行此操作 但我需要插入多个日志记录 并且它们都需要具有相同的时间戳 为了做到这一点 我正在尝试使用WITH子句来获取当前时间戳 然后我可以在多个地方使用它 我的声明看