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

Posted

技术标签:

【中文标题】使用 HSQL 和 Spring Script Utils 创建触发器或过程【英文标题】:Creating a trigger or procedure using HSQL and Spring Script Utils 【发布时间】:2015-04-18 11:24:26 【问题描述】:

由于某种原因,当我尝试执行将初始化数据库和表的测试时,它会不断弹出。我正在使用 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 之后,如果发现这个链接告诉了 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 中编辑了我的代码,以在到达单词订阅者时切断命令:

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

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

 Unexpected token:  in statement [CREATE TRIGGER ]

我真的很难过。有没有其他人遇到过这种情况?

【问题讨论】:

【参考方案1】:

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

HSQLDB Trigger Statement ERROR when using SimpleJdbcTestUtils.executeSqlScript()

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

由于某种原因,当我google hsqldb maven时,弹出的第一个项目是1.8版本。我以为那是最新的。我的错。

【讨论】:

以上是关于使用 HSQL 和 Spring Script Utils 创建触发器或过程的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:使用 HSQL 和 Spring 不支持此函数

在内存数据库中嵌入 HSQL 的 Spring DataSource 和 Linux 上的休眠创建-删除排序

使用 jdbc:embedded-database 时如何连接到 Spring 创建的 HSQL?

HSQL 在 Spring 引导测试中不起作用

Spring:HSQL-无法执行数据库脚本

在 LightAdmin (Spring/JPA/Hibernate) 中使 HSQL 数据库持久化