HSQLDB 触发器 - 引用新表

Posted

技术标签:

【中文标题】HSQLDB 触发器 - 引用新表【英文标题】:HSQLDB Trigger - Referencing new table 【发布时间】:2014-07-31 12:39:29 【问题描述】:

我有以下表格(简体)

table A (
    id,
    fingerprint)

table B (
    a_id,
    value)

我有以下触发器

CREATE TRIGGER "makeFingerPrint" AFTER INSERT ON "B"
    FOR EACH STATEMENT
       UPDATE "A" SET
           fingerprint = (select sum(value) from "b" where a_id = id)
       WHERE fingerprint IS NULL

这适用于初始插入并确保 A 的“指纹”列为 NULL。

我尝试做的是引用新表(所有行)并使用这些更新,但我没有找到如何引用该新表的方法。

我试图找到一些东西,但没有运气,引用新表并做

CREATE TRIGGER makeFingerPrint AFTER INSERT ON "B"
   REFERENCING NEW TABLE AS newTable   (with and without quotes)
   FOR EACH STATEMENT
   UPDATE "A" SET
           fingerprint = (select sum(value) from "b" where a_id = id)
       WHERE id IN (select a_id from "newTable")

我总是收到错误“用户缺少权限或找不到对象:newTable”

有什么想法吗?甚至可以以某种方式查询引用表?

【问题讨论】:

我认为您唯一的选择是为此使用行级触发器。 我的解决方法对我来说很好,但我需要观察它(如果我想重新计算,请将列重置为 NULL)。那么,在什么情况下有TABLE(引用新表)? 【参考方案1】:

这对于用 SQL 编写的触发器是不可能的。

【讨论】:

HSQL 扩展了 SQL,我想我在某处读到它基本上是 Java 类。所以我认为这会以某种方式起作用。

以上是关于HSQLDB 触发器 - 引用新表的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 删除触发器导致子查询出现问题

HSQLDB 触发器语法 - 不可能在触发器内进行子查询吗?

HSQLDB 在触发器中声明行

Informix 中插入触发器的自引用更新

Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加

创建仅在创建新表时运行的触发器