我正在使用HSQLDB作为测试的内存数据库来开发Spring Boot项目。 我决定在h2上使用HSQLDB的原因是我的数据源很旧,并且包含许多带有多个H2无法处理的OUT参数的查询
虽然我可以在HSQL上使用带有多个OUT参数的JPA查询来运行,但现在我需要模拟一些存储过程。
在H2中是可能的,例如您看到的here。是否可以在HSQLDB上模拟存储过程?到目前为止,我只能找到一些非常老的文章(2011年),而在HSQLDB文档本身中什么也找不到。
答案 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
}