2016-03-22 9 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で保存された関数を呼び出すための他の方法を発見しました。 raw JDBCでCallableStatementを使用することは可能ですので、JOOQでも可能であるはずです。

JOOQでストアドファンクションをバッチで呼び出すことは可能ですか?はいの場合、それを行う方法?

ストアド関数のシグネチャ:

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

あなたの関数の署名を(pgplsqlに)投稿できますか? –

+0

@LukasEder done、 'boolean'値を返そうとしましたが、CallableStatementを使って特別な' call'構文でjdbcがストアドファンクションコールを処理できない場合があります。 –

答えて

1

select [function call]構文は、最新の1208年9月4日PostgresのJDBCドライバによってサポートされています。私は9.4.1205バージョンを使用していました。

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

保存された関数がvoidを返す場合は、使用することができます:

最新(1208年4月9日)JDBCドライバを使用する場合、保存された関数は、いくつかの値を返す場合

は、次の構文を使用することができます

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'以外の値を返す必要があります。ストアド関数が 'void'を返す場合、Jooqは' Routines'クラスのヘルパーメソッドを生成しません。 –

関連する問題