JOOQ如何批量调用存储函数?
How do you call a stored function in batch with JOOQ?
我想批量调用一个存储函数多次。我正在使用 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 批量调用存储函数。
我知道原始 JDBC 和 CallableStatement 是可能的,所以我假设 JOOQ 也应该是可能的。
JOOQ可以批量调用存储函数吗?如果是,怎么做?
存储函数签名:
create function foo(param1 int, param2 int) returns boolean as $$ ... $$ language plpgsql
最新的 9.4.1208 postgres jdbc 驱动程序支持 select [function call]
语法。我使用的是 9.4.1205 版本。
如果您使用最新的 (9.4.1208) jdbc 驱动程序,如果存储函数 returns 某些值:
,则可以使用以下语法
Query query1 = context.select(Routines.foo(someParam));
Query query2 = context.select(Routines.foo(someParam));
context.batch(query1, query2).execute();
如果存储函数returns 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();
我想批量调用一个存储函数多次。我正在使用 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 批量调用存储函数。 我知道原始 JDBC 和 CallableStatement 是可能的,所以我假设 JOOQ 也应该是可能的。
JOOQ可以批量调用存储函数吗?如果是,怎么做?
存储函数签名:
create function foo(param1 int, param2 int) returns boolean as $$ ... $$ language plpgsql
最新的 9.4.1208 postgres jdbc 驱动程序支持 select [function call]
语法。我使用的是 9.4.1205 版本。
如果您使用最新的 (9.4.1208) jdbc 驱动程序,如果存储函数 returns 某些值:
,则可以使用以下语法Query query1 = context.select(Routines.foo(someParam));
Query query2 = context.select(Routines.foo(someParam));
context.batch(query1, query2).execute();
如果存储函数returns 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();