HSQLDB CREATE TRIGGER 抛出异常:声明中错误或缺少数据影响子句:MODIFIES SQL
Posted
技术标签:
【中文标题】HSQLDB CREATE TRIGGER 抛出异常:声明中错误或缺少数据影响子句:MODIFIES SQL【英文标题】:HSQLDB CREATE TRIGGER throws exception: wrong or missing data impact clause in declaration: MODIFIES SQL 【发布时间】:2014-02-13 11:44:19 【问题描述】:我想为一个表创建一个触发器,该触发器在插入新行时将一行插入另一个表。
CREATE TABLE S.A (
ID NUMERIC(18) NOT NULL,
OTHERID NUMERIC(18) NOT NULL,
);
CREATE TABLE S.B
(
...
AID NUMERIC(18) NOT NULL,
...
);
CREATE TRIGGER mytrigger BEFORE INSERT ON S.B
REFERENCING NEW AS newrow FOR EACH ROW
INSERT INTO S.A (ID, OTHERID) VALUES (newrow.AID, newrow.AID);
但是我得到了触发器语句的异常:
Caused by: org.hsqldb.HsqlException: wrong or missing data impact clause in declaration: MODIFIES SQL
at org.hsqldb.error.Error.error(Unknown Source)
...
文档没有说明必须在此语句中使用 MODIFIES SQL。谁能告诉我如何正确编写这个触发器?
【问题讨论】:
MODIFIES SQL DATA 仅用于更改其他表中数据的过程。由于触发器只能是AFTER触发器,错误提示这个BEFORE触发器修改了数据,不适合。 【参考方案1】:我认为这是相关的,来自here
BEFORE 触发器不能修改数据库的其他表。所有 BEFORE 触发器都可以通过抛出异常来否决操作。
而
AFTER 触发器还可以执行额外的数据更改,例如将额外的行插入到不同的表中以进行数据审计。
即如果要插入另一个表,则需要将策略更改为 AFTER
或 INSTEAD OF
触发器。
【讨论】:
以上是关于HSQLDB CREATE TRIGGER 抛出异常:声明中错误或缺少数据影响子句:MODIFIES SQL的主要内容,如果未能解决你的问题,请参考以下文章
RazorSQL 导致 HSQLDB 抛出 org.hsqldb.HsqlException:需要大于 '2.1.0.0' 的客户端驱动程序版本。 HSQLDB 服务器版本是 '2.3.4'
HSQLDB 在 Windows 上运行,但在 Linux 上抛出异常
为啥在读取数据库 hsqldb 中的 blob 时抛出 java.lang.IndexOutOfBoundsException
UcanaccessDriver 抛出 ExceptionInInitializerError 原因:java.lang.RuntimeException: org.hsqldb.jdbc.JDBCD