Как создать хранимую процедуру, используя базу данных H2? - PullRequest
18 голосов
/ 23 июня 2010

Кто-нибудь пытался создать хранимые процедуры, используя базу данных H2?

1 Ответ

9 голосов
/ 20 марта 2011

Для доступа к базе данных в функции Java вам необходимо соединение.Для H2 существует два способа получить такое соединение:

Решение 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 вы можете открыть новое соединение в функции Java с помощью DriverManager.getConnection("jdbc:default:connection").Эта функция доступна в H2 версии 1.3.151 и новее и по умолчанию отключена.Чтобы включить его, добавьте ;DEFAULT_CONNECTION=TRUE к URL базы данных .Это проблематичная функция, поскольку драйвер Oracle JDBC попытается разрешить URL-адрес этой базы данных, если он загружен до драйвера H2.Поэтому в принципе вы не можете использовать эту функцию, если драйвер Oracle загружен (я считаю это ошибкой в ​​драйвере Oracle).

...