2016-03-22 3 views
0

Я хочу вызвать хранимую функцию несколько раз в пакетном режиме. Я использую JOOQ 3.7.3 и PostgreSQL 9.5. Я попытался использовать оператор select [function call] в пакетном режиме, но он выдает следующее исключение PSQLException: A result was returned when none was expected.Как вы называете сохраненную функцию в пакете с JOOQ?

// exemplary 'select [function call]' 
context.batch(context.select(Routines.foo(someParam))).execute(); 

Я не нашел другого способа вызова хранимых функций с помощью JOOQ в пакетном режиме. Я знаю, что это возможно с необработанным JDBC с CallableStatement, поэтому я предполагаю, что это также возможно с JOOQ.

Возможно ли с помощью JOOQ вызывать хранимые функции в пакетном режиме? Если да, как это сделать?

Сохраненная функция подписи:

create function foo(param1 int, param2 int) returns boolean as $$ ... $$ language plpgsql 
+0

Можете ли вы опубликовать подпись своей функции (в pgplsql)? –

+0

@LukasEder done, я также попытался вернуть значение 'boolean', кажется, что проблема в том, что jdbc не может обрабатывать вызовы хранимых функций, если он не обрабатывается специальным синтаксисом' call' с CallableStatement –

ответ

1

Синтаксис select [function call] поддерживается последней 9.4.1208 Postgres драйвер JDBC. Я использовал версию 9.4.1205.

Если вы используете последнюю версию (9.4.1208) драйвер JDBC вы можете использовать следующий синтаксис, если хранимая функция возвращает некоторое значение:

Query query1 = context.select(Routines.foo(someParam)); 
Query query2 = context.select(Routines.foo(someParam)); 
context.batch(query1, query2).execute(); 

Если хранимая функция возвращает void вы можете использовать:

Foo foo1 = new Foo(); foo1.setParam(someParam); 
Foo foo2 = new Foo(); foo2.setParam(someParam); 
context.batch(context.select(foo1.asField()), context.select(foo2.asField())).execute(); 
+0

Чтобы использовать 'Routines.foo (someParam) 'хранимой функции необходимо вернуть некоторое значение, отличное от' void'. Jooq не генерирует вспомогательные методы в классе 'Routines', если хранимая функция возвращает' void'. –

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