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

Creating a trigger or procedure using HSQL and Spring Script Utils

出于某种原因,当我尝试执行初始化数据库和表的测试时,此消息不断弹出。我正在使用 Spring 4.1.2.RELEASE

尝试创建触发器时:

Caused by: java.sql.SQLException: Unexpected end of command: REFERENCING

触发器的代码是:

CREATE TRIGGER subscriber_created_at BEFORE INSERT ON subscriber
REFERENCING new ROW AS newrow
FOR EACH ROW BEGIN ATOMIC
    IF newrow.dateCreated IS NULL
    THEN SET newrow.dateCreated = NOW();
    END IF;
END;/;

然后在搜索 SO 之后,如果找到这个 link 告诉 OP 如何修复它并且只是为了测试,看看我是否可以得到不同的错误,它尝试了 OP 的代码并得到了相同的错误.

程序的代码是:

 CREATE PROCEDURE p_recordTaskExecution(IN userTaskId BIGINT, 
 IN isSuccess BOOLEAN, 
 IN statusMessage VARCHAR(2000), 
 IN operationsPerformed BIGINT, 
 INOUT procedureStatus BOOLEAN) BEGIN ATOMIC
 IF userTaskId = 1 Then
      SET procedureStatus = true; 
 ELSE
      SET procedureStatus = false;
 END IF;
 END; /;

尝试创建过程时:

Caused by: java.sql.SQLException: Unexpected token: PROCEDURE in statement [CREATE PROCEDURE]

为了测试,我在 xml 中编辑了我的代码,以在它到达 subscriber 一词时切断 commnad:

<jdbc:script location="classpath:/input_data/createTriggers.sql" separator="subscriber" />

它确实被切断了!我得到的错误是:

 Unexpected token:  in statement [CREATE TRIGGER ]

我真的难倒了。还有其他人遇到过这个吗?

终于得到了这个问题的答案

HSQLDB Trigger Statement ERROR when using SimpleJdbcTestUtils.executeSqlScript()

原来我必须将 hsqldb 更新到 2.3.2。

不知为何,我googlehsqldb maven时,第一个弹出的是1.8版本。我以为那是最新的。我的错。