hsql データベースの移行に flyway 1.7 の API を使用しています。ストアド プロシージャに問題があります。次のスクリプトは、hsql データベース マネージャーで正常に動作します。
CREATE TABLE CUSTOMER (
firstname VARCHAR(50),
lastname VARCHAR(50),
mod_ts TIMESTAMP
);
CREATE PROCEDURE new_customer(firstname VARCHAR(50), lastname VARCHAR(50), address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
INSERT INTO CUSTOMER VALUES (firstname, lastname, CURRENT_TIMESTAMP);
END
しかし、フライウェイの移行中にスクリプトが正しく解析されていないと思います (フライウェイは、セミコロンの後に 2 番目のステートメントが終了すると信じているようです)。
対応するログ出力は次のとおりです。
DEBUG 2012-11-22 14:16:00,232 [main] (SqlScript.java:161) - Found statement at line 1: create table CUSTOMER (
firstname varchar(50),
lastname varchar(50),
mod_ts timestamp
);
DEBUG 2012-11-22 14:16:00,232 [main] (SqlScript.java:161) - Found statement at line 7: CREATE PROCEDURE new_customer(firstname VARCHAR(50), lastname VARCHAR(50), address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
INSERT INTO CUSTOMER VALUES (firstname, lastname, CURRENT_TIMESTAMP);
DEBUG 2012-11-22 14:16:00,232 [main] (SqlStatement.java:75) - Executing SQL: create table CUSTOMER (
firstname varchar(50),
lastname varchar(50),
mod_ts timestamp
)
DEBUG 2012-11-22 14:16:00,232 [main] (SqlStatement.java:75) - Executing SQL: CREATE PROCEDURE new_customer(firstname VARCHAR(50), lastname VARCHAR(50), address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
INSERT INTO CUSTOMER VALUES (firstname, lastname, CURRENT_TIMESTAMP)
ERROR 2012-11-22 14:16:00,232 [main] (DbMigrator.java:231) - com.googlecode.flyway.core.exception.FlywayException: Error executing statement at line 7: CREATE PROCEDURE new_customer(firstname VARCHAR(50), lastname VARCHAR(50), address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
INSERT INTO CUSTOMER VALUES (firstname, lastname, CURRENT_TIMESTAMP)
ERROR 2012-11-22 14:16:00,232 [main] (DbMigrator.java:236) - Caused by org.hsqldb.HsqlException: unexpected end of statement: required: ; : line: 4
この問題を解決する方法はありますか?
編集私は興味深い観察をしました。flyway コマンドライン プログラムを使用すると、完全に機能します。