H2データベースを使用してストアドプロシージャを作成しようとした人はいますか?
Java関数内でデータベースにアクセスするには、接続が必要です。H2の場合、このような接続を取得するには2つの方法があります。
解決策1:Java関数の最初のパラメーターが_Java.sql.Connection
_である場合、データベースは接続。SQLの場合、これは「非表示」パラメータです。つまり、明示的に設定することはできず、必要もありません。これは文書化されています: ユーザー定義関数とストアドプロシージャ 、 "関数接続が必要です」例:
_CREATE ALIAS QUERY AS $$
ResultSet query(Connection conn, String sql) throws SQLException {
return conn.createStatement().executeQuery(sql);
} $$;
CALL QUERY('SELECT * FROM DUAL');
_
解決策2:Apache DerbyおよびOracleとの互換性のために、DriverManager.getConnection("jdbc:default:connection")
を使用してJava関数内で新しい接続を開くことができます。この機能はH2バージョン1.3.151以降で使用可能であり、デフォルトで無効になっています。有効にするには、_;DEFAULT_CONNECTION=TRUE
_ データベースURLに を追加します。これは問題のある機能です。 JDBCドライバーは、H2ドライバーの前にロードされた場合、このデータベースURLを解決しようとします。したがって、基本的に、Oracleドライバーがロードされている場合、この機能は使用できません(これはOracleドライバーのバグだと思います)。