2012-03-02 8 views
2

私は現在、HSQLデータベースを作成するためのSQLスクリプトをロードしようとしています。HSQLDB TRIGGER文のERROR SimpleJdbcTestUtils.executeSqlScriptを(使用)

CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS 
REFERENCING NEW AS newrow OLD AS oldrow 
FOR EACH ROW 
BEGIN ATOMIC 
    SET newrow.VERSION = oldrow.VERSION + 1; 
END; 

このコードを使用してテストを実行し、次のエラーが発生します:

Resource resource = new ClassPathResource("/create-table.sql");   
SimpleJdbcTestUtils.executeSqlScript(template, resource, Boolean.FALSE); 

スクリプトトリガの作成文が含まれています。 これは、次のコードを使用して行われ

Caused by: java.sql.SQLException: Unexpected end of command: REFERENCING in statement 
[CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS REFERENCING] 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source) 
at org.hsqldb.jdbc.jdbcStatement.executeUpdate(Unknown Source) 
at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) 
at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) 
at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:508) 
at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:1) 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395) 

私は春の3.0.5とHSQLDBを使用しています(ドライバ、...)のバージョンは1.8.0.10です。

誰もこの問題を抱えていたことがありますか、これを解決する方法を知っていますか?

(私も、1行にすべてを置くことを試みた別のファイルにSQLを置き、セミコロンを削除し、...)

すべてのヘルプははるかに高く評価されます。あらかじめThanx!

ウェンディ。

答えて

3

トリガーの定義が完全ではありませんでした。 @fredtが示唆したように2.2.8にHSQLDBの

アップデートバージョン: ソリューションは、与えられた回答のミックスになりました。 は、私は、スクリプトを作成するビットを変更:

CREATE TRIGGER t BEFORE UPDATE ON SUBJECTS 
REFERENCING NEW AS newrow OLD AS oldrow 
FOR EACH ROW 
    SET newrow.VERSION = oldrow.VERSION + 1; 

は今ありがとう

セミコロンなどについての苦情は、ヘルプ@Adiと@fredtのために存在しません!

ウェンディ

+0

はい、「新参照すると、」HSQL 1.8および「2.0の初期バージョンを」中は動作しません - あまりにもこれにつまずいは!注意! – alexandroid

0

変更

newrow.VERSION = oldrow.VERSION + 1 SET。

END; newrow.VERSION = oldrow.VERSION + 1

に設定; END。

SimpleJdbcTestUtils ';'と仮定します。区切り文字がスクリプト内にある場合は区切り文字として使用します。したがって、複数の ';'を含む単一のステートメントがある場合は、 ';'の後に改行文字(\ n)がないことを確認する必要があります。

私はあなたの文は複数を持っている場合は、SimpleJdbcTestUtilsを放棄することを提案します「;」あなたのスクリプトにSQLコメントが含まれている場合(楽しく試してみてください)。代替チェックの場合は、thisと私はthisの方が好きです。

0

最新バージョンのHSQLDB(現在は2.2.8)を使用する必要があります。古いバージョンは、この形式のCREATE TRIGGERをサポートしていません。あなたはHSQLDB jarを変更した

、との問題のために、ADIの勧告に従ってください「;」。