HSQL 触发意外令牌 NEW

Posted

技术标签:

【中文标题】HSQL 触发意外令牌 NEW【英文标题】:HSQL Trigger unexpected token NEW 【发布时间】:2016-04-06 08:44:16 【问题描述】:

我有以下触发器,它取自一个正在工作的 Oracle:

create trigger D_DOCUMENT before delete on DOCUMENT
REFERENCING NEW AS newrow OLD AS oldrow
FOR EACH ROW
BEGIN ATOMIC
    -- Further SQL
END;

现在在 HSQLDB 框架中运行。 我需要添加关键字 ATOMIC,但真正的症结在于 REFERENCING NEW 行。 当我运行它时,我得到以下异常:

Caused by: org.hsqldb.HsqlException: unexpected token: NEW

查看文档我真的不明白为什么这个令牌是意外的,所以我很困惑为什么这是抱怨“新”。 注释掉该行确实会导致“继续前进”的错误,但是似乎语法有问题,或者这是我偶然发现的一些错误。

有人用过这种类型的触发器吗?您可以发布一个示例删除触发器来尝试吗?

【问题讨论】:

您希望 hsqldb 与 Oracle 的产品特定存储过程兼容吗? 不,我没有,因此我已将其从原始规范修改为 HSQL。使用最新版本的 HSQL 可以做到这一点,所以问题就来了。 【参考方案1】:

BEFORE DELETE 触发器中没有 NEW ROW。只有一个 OLD ROW 即将被删除。

错误表明了这一事实。

【讨论】:

谢谢@fredt,这就是答案。

以上是关于HSQL 触发意外令牌 NEW的主要内容,如果未能解决你的问题,请参考以下文章

HSQL - 意外的令牌:语句中的 PROCEDURE

具有多个 when 子句的 HSQL 触发器

HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID

使用 HSQL 和 Spring Script Utils 创建触发器或过程

HSQL 触发器生成 SQL 错误:-458,SQLState: S1000 / java.lang.ArrayIndexOutOfBoundsException

“JSON 中的意外令牌”(通过 Zapier 连接的 Firestore)