H2インメモリデータベースを使用して、Javaアプリケーションの機能テストを作成しようとしています。Oracle を運用データベースとして使用しているため、一部のコードは PL/SQL で記述されています。そこで、Oracle 互換モードをオンにすると、URL は次のようになりますjdbc:h2:mem:test;MODE=Oracle
。
私が問題を抱えている実際のアプリケーションコードは次のようになります (呼び出しの前にシーケンスとテーブルの両方が作成されていることに注意してください)。
CallableStatement = con.prepareCall(
" begin insert into profiles(" + PROFILE_FIELDS + ") " +
" values (sq_profiles.nextval, ?, ?, ?, ?, ?) " +
" returning profile_id into ?; end;");
動作をテストするために書いたこのサンプルコードと同じエラーで失敗します。begin ... end;
Connection con = connectionProvider.getConnection()
con.prepareStatement("CREATE TABLE test (id INT NOT NULL)").execute()
con.prepareStatement("INSERT INTO test SELECT 1 FROM dual").execute()
con.prepareStatement("BEGIN INSERT INTO test SELECT 2 FROM dual; END;").execute()
私が得るエラー:
Syntax error in SQL statement "BEGIN INSERT[*] INTO TEST SELECT 2 FROM DUAL; END; "; SQL statement:
BEGIN INSERT INTO test SELECT 2 FROM dual; END; [42000-167]
私の質問は、begin ... end;
ブロックは H2 でサポートされていますか? はいの場合、上記のコードのどこが間違っている可能性がありますか?
ありがとう。