使用Spring Boot和HSQLDB模拟存储过程

时间:2019-04-04 15:13:29

标签: spring-boot stored-procedures hsqldb

我正在使用HSQLDB作为测试的内存数据库来开发Spring Boot项目。 我决定在h2上使用HSQLDB的原因是我的数据源很旧,并且包含许多带有多个H2无法处理的OUT参数的查询

虽然我可以在HSQL上使用带有多个OUT参数的JPA查询来运行,但现在我需要模拟一些存储过程。

在H2中是可能的,例如您看到的here。是否可以在HSQLDB上模拟存储过程?到目前为止,我只能找到一些非常老的文章(2011年),而在HSQLDB文档本身中什么也找不到。

2 个答案:

答案 0 :(得分:1)

HSQLDB支持带有OUT参数的存储过程。您可以用SQL或Java编写过程。来自以下文档的示例:

CREATE PROCEDURE new_customer(OUT newid INT, IN firstname VARCHAR(50), IN lastname VARCHAR(50), IN address VARCHAR(100))
   MODIFIES SQL DATA
   BEGIN ATOMIC
     DECLARE temp_id INTEGER;
     INSERT INTO CUSTOMERS VALUES (DEFAULT, firstname, lastname, CURRENT_TIMESTAMP);
     SET temp_id = IDENTITY();
     INSERT INTO ADDRESSES VALUES (DEFAULT, temp_id, address);
     SET newid = temp_id;
   END

您可以找到上述示例以及《指南》中用Java编写的示例。 http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html

答案 1 :(得分:0)

在@fredt提供的文档URL中,我发现this example对我有用:

CREATE PROCEDURE get_customer(IN id INT, OUT firstname VARCHAR(50), OUT lastname VARCHAR(50)) 
READS SQL DATA    
LANGUAGE JAVA    
EXTERNAL NAME 'CLASSPATH:org.hsqldb.test.Test01.getCustomerProcedure' 

public static void getCustomerProcedure(int id, String[] firstn, String[] lastn) throws java.sql.SQLException { 
firstn[0] = somevalue; // parameter out value is assigned 
lastn[0] = somevalue; // parameter out value is assigned
 }