Если ваша основная задача состоит в том, чтобы запускать операторы SQL (или SQLesque) в ваших пользовательских функциях H2 Java, jOOQ может быть опцией как "PL/Java" implementation. Конечно, это все равно будет решением Java.
Примером такой функции можно увидеть в этом блоге:
http://blog.jooq.org/2011/11/04/use-jooq-inside-your-h2-database
public class Functions {
public static int countBooks(Connection connection, Integer authorId)
throws SQLException {
// Translate your T-SQL statements to jOOQ statements
return DSL.using(connection, SQLDialect.H2)
.selectCount()
.from(BOOK)
.where(BOOK.AUTHOR_ID.eq(authorId))
.fetchOne(0, int.class);
}
}
Объявляет выше способа в качестве псевдонима Н2
CREATE ALIAS countBooks
FOR "org.example.Functions.countBooks";
использовать функцию в SQL
SELECT author.last_name, countBooks(author.id)
FROM author
Аналогичный подход можно сделать и с собственной абстракцией SQL H. Я думаю, использование JaQu не добавит никакой дополнительной зависимости.
Я не думаю, что это возможно в H2. Возможно, вам стоит взглянуть на HSQLDB, который поддерживает процедуры на своем собственном диалекте SQL и для этого не требует Java. Кстати: что вы имеете в виду «* написано на SQL *»? Какая СУБД вы источник? (SQL - это ** только ** a * query * язык ** не ** продукт СУБД). –
Если вы посмотрите [здесь] (http://www.h2database.com/html/features.html#user_defined_functions) в документации h2, в нем говорится: «В дополнение к [встроенным функциям] (http: // www. h2database.com/html/functions.html), эта база данных поддерживает пользовательские функции Java ». т. е. вы создаете свои процедуры в виде java-кода, а затем создавайте для них псевдонимы. –
Спасибо за быстрый ответ. Iam, используя ** MsSqlDatabase **, и функция написана для MsSqlDB. Тогда единственный способ написать процедуры в H2 - через Java Code ..? – arunsankarkk