2013-06-25 3 views
6

Этот вопрос относится к вопросу "How to create stored procedure using H2 database?" (продолжение того же вопроса).Как написать функцию в базе данных H2 без использования Java

Есть ли способ написать функцию в H2 без использования Java-кода? Мое требование - перевести функции, написанные на SQL в H2, без использования кода Java. Я нашел множество примеров в разных порталах, которые делают то же самое с использованием Java-кода. Ваша помощь будет принята с благодарностью.

С уважением Arun

+2

Я не думаю, что это возможно в H2. Возможно, вам стоит взглянуть на HSQLDB, который поддерживает процедуры на своем собственном диалекте SQL и для этого не требует Java. Кстати: что вы имеете в виду «* написано на SQL *»? Какая СУБД вы источник? (SQL - это ** только ** a * query * язык ** не ** продукт СУБД). –

+1

Если вы посмотрите [здесь] (http://www.h2database.com/html/features.html#user_defined_functions) в документации h2, в нем говорится: «В дополнение к [встроенным функциям] (http: // www. h2database.com/html/functions.html), эта база данных поддерживает пользовательские функции Java ». т. е. вы создаете свои процедуры в виде java-кода, а затем создавайте для них псевдонимы. –

+0

Спасибо за быстрый ответ. Iam, используя ** MsSqlDatabase **, и функция написана для MsSqlDB. Тогда единственный способ написать процедуры в H2 - через Java Code ..? – arunsankarkk

ответ

14

В настоящее время, H2 делает только вспомогательные функции, написанные на Java или связанный язык (например, Groovy или Scala). PL/SQL (Oracle) и T-SQL (MS SQL Server, Sybase) не поддерживаются.

+0

НЕТ все еще не поддерживает хранимую процедуру, поэтому наш запрос не нужно перекомпилировать каждый раз и остальную часть функций SP? –

+0

@AbdulJabbarWebBestow жаль, что я не понимаю ваш вопрос. –

4

Если ваша основная задача состоит в том, чтобы запускать операторы 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 не добавит никакой дополнительной зависимости.

+0

Только то, находясь в поиске! – user6123723

Смежные вопросы