【发布时间】:2020-02-15 00:21:50
【问题描述】:
我正在尝试为调用存储过程的 DAO 编写集成测试。我从一个测试文件创建了一个嵌入式 HSQL 数据库,该文件只是创建一个表、填充它,以及一个返回表结果的简单存储过程:
CREATE PROCEDURE usp_GetAvailableServices()
READS SQL DATA
BEGIN ATOMIC
DECLARE result CURSOR WITH RETURN FOR SELECT FeatureType FROM PUBLIC.service_areas ;
OPEN result;
END/;
创建数据库的代码如下。数据库已正确创建和填充。
db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("db/sql/getAvailableServicesStoredProcedure.sql")
.setSeparator("/;")
.build();
尝试使用General error; nested exception is java.sql.SQLException: General error 调用存储过程时我的测试失败,这最终是由
Caused by: org.hsqldb.HsqlException: General error
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
...
我让 HSQLDB 控制台运行并确认我的存储过程确实已创建(它在information_schema.routines 下列出),但是当我尝试使用call usp_GetAvailableServices() 直接在控制台中调用存储过程时,我仍然看到General error / Error Code: -458 / State: S1000
这让我相信我的创建过程语法有错误(根据http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_cursors 似乎是正确的),或者我不知道如何正确调用 HSQLDB 中的例程。
使用 SqlServer 调用实时存储过程的代码可以正常工作。只有 HSQLDB 不起作用。
【问题讨论】:
标签: java stored-procedures hsqldb