Синтаксис процедуры создания HSQL не соответствует документации
Я использую HSQL в качестве базы данных в тесте памяти для запуска интеграционных тестов. В производстве у меня есть база данных Oracle 10g. Идея состоит в том, чтобы запустить сценарии db create, которые я использовал для создания db в oracle, чтобы создать тот же самый db в hsql для интеграционных тестов.
Я сталкиваюсь с препятствиями в отношении различий в синтаксисе, что, несмотря на указание HSQL, что синтаксис является оракулом, я продолжаю зацикливаться на создании хранимых процедур.
Мой тестовый db bean определяется так:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:test;sql.syntax_ora=true"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="file:Artifacts/sql/install.sql"/>
<jdbc:script location="file:Artifacts/sql/patchset/1.0.0.02.create_survey_tables.sql"/>
<jdbc:script location="file:Artifacts/sql/patchset/1.00.01.update.sql"/>
<jdbc:script location="file:Artifacts/sql/patchset/1.00.03.insert_surveyQA2.sql"/>
<jdbc:script location="file:Artifacts/sql/patchset/1.00.05.insert_surveyQA4.sql"/>
</jdbc:initialize-database>
скрипт sql, который я запускаю, имеет следующий оператор процедуры create:
CREATE PROCEDURE reg_create(
OUT vregID NUMBER,
vsessionID VARCHAR2(254),
vextrnID VARCHAR2(100),
vindivID VARCHAR2(100),
vfirstName VARCHAR2(100),
vlastName VARCHAR2(100),
vemail VARCHAR2(320),
vaddrLine1 VARCHAR2(254),
vaddrLine2 VARCHAR2(254),
vcity VARCHAR2(100),
vstate VARCHAR2(2),
vzipCode VARCHAR2(5),
vdiagnosed NUMBER,
vrelationship NUMBER,
vpatientFirstName VARCHAR2(100),
vpatientLastName VARCHAR2(100),
vbirthdate DATE,
vtreatment NUMBER,
vcfCenter NUMBER,
vofflineMaterial NUMBER,
vmoc VARCHAR2(100),
voptIn NUMBER,
vcreateDate DATE,
vpendingSend NUMBER)
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE vregID NUMBER;
SET vregID = (SELECT NVL(MAX(REG_ID), 0)+1 FROM CFLIVING_REG);
INSERT INTO REG( REG_ID, SESSION_ID, EXTRN_ID, INDIV_ID, FIRST_NAME, LAST_NAME, EMAIL, ADDR_LINE1, ADDR_LINE2, CITY,
STATE, ZIP_CODE, DIAGNOSED, RELATIONSHIP, PATIENT_FIRST_NAME, PATIENT_LAST_NAME, BIRTHDATE,
TREATMENT, CF_CENTER, OFFLINE_MATERIAL, MOC, OPT_IN, CREATE_DATE, PENDING_SEND )
VALUES (vregID, vsessionID, vextrnID, vindivID, vfirstName, vlastName, vemail, vaddrLine1, vaddrLine2, vcity, vstate,
vzipCode, vdiagnosed, vrelationship, vpatientFirstName, vpatientLastName, vbirthdate,
vtreatment, vcfCenter, vofflineMaterial, vmoc, voptIn, vcreateDate, vpendingSend);
END
И когда я запускаю тест, HSQL дает сбой из-за следующего:
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 18 of resource URL [file:Artifacts/sql/install.sql]: CREATE PROCEDURE cfliving_reg_create( OUT vregID NUMBER, vsessionID VARCHAR2(254), vextrnID VARCHAR2(100), vindivID VARCHAR2(100), vfirstName VARCHAR2(100), vlastName VARCHAR2(100), vemail VARCHAR2(320), vaddrLine1 VARCHAR2(254), vaddrLine2 VARCHAR2(254), vcity VARCHAR2(100), vstate VARCHAR2(2), vzipCode VARCHAR2(5), vdiagnosed NUMBER, vrelationship NUMBER, vpatientFirstName VARCHAR2(100), vpatientLastName VARCHAR2(100), vbirthdate DATE, vtreatment NUMBER, vcfCenter NUMBER, vofflineMaterial NUMBER, vmoc VARCHAR2(100), voptIn NUMBER, vcreateDate DATE, vpendingSend NUMBER) MODIFIES SQL DATA BEGIN ATOMIC DECLARE vregID NUMBER
Caused by: java.sql.SQLSyntaxErrorException: unexpected end of statement: required: ;
Документация на сайте HSQL:http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html указывает на то, что мой синтаксис правильный, поэтому я не совсем понимаю, в чем проблема.
есть идеи?