如何使用JOOQ批量调用存储的函数?

时间:2016-03-22 13:46:41

标签: postgresql jooq postgresql-9.5

我想批量调用多次存储函数。我使用的是JOOQ 3.7.3和PostgreSQL 9.5。我已尝试批量使用select [function call]语句,但它会抛出以下异常PSQLException: A result was returned when none was expected

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

我发现没有其他方法可以批量调用JOOQ存储的函数。 我知道使用CallableStatement的原始JDBC是可能的,所以我假设它也应该可以用JOOQ。

JOOQ可以批量调用存储的函数吗?如果是的话,该怎么做?

存储功能签名:

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

1 个答案:

答案 0 :(得分:1)

最新的9.4.1208 postgres jdbc驱动程序支持select [function call]语法。我使用的是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();