Хранимые хранимые процедуры с помощью Spring Boot и HSQLDB - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над проектом Spring Boot с HSQLDB в качестве базы данных в памяти для моих тестов. Причина, по которой я решил использовать HSQLDB вместо h2, заключается в том, что мой источник данных довольно старый и содержит много запросов с несколькими параметрами OUT, которые H2 не может обработать

Несмотря на то, что я могу работать с использованием запросов JPA с несколькими параметрами OUT на HSQL, теперь мне нужно смоделировать некоторые из хранимых процедур.

В H2 возможно, как вы можете видеть, например, здесь . Можно ли смоделировать хранимые процедуры на HSQLDB? До сих пор я мог найти только некоторые действительно старые статьи (2011) и ничего в самой документации по HSQLDB.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

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

0 голосов
/ 06 апреля 2019

В документации, предоставленной @fredt, я нашел этот пример , который выполняет эту работу за меня:

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
 }
...