2016-03-22 25 views
0

Kayıtlı bir işlevi toplu olarak birden çok defa aramak istiyorum. JOOQ 3.7.3 ve PostgreSQL 9.5 kullanıyorum. select [function call] deyimini toplu olarak kullanmayı denedim ancak şu istisnayı atar PSQLException: A result was returned when none was expected.JOOQ ile toplu olarak saklanan bir işlevi nasıl çağırırsınız?

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

Kayıtlı işlevleri JOOQ ile toplu olarak çağırmanın başka bir yolunu bulamadım. CallableStatement ile ham JDBC ile mümkün olduğunu biliyorum, bu yüzden JOOQ ile mümkün olması gerektiğini varsayalım.

JOOQ ile saklı işlevleri toplu olarak aramak mümkün mü? Evet ise nasıl yapılır?

Saklanan işlev imzası:

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

İşlevinizin imzasını (pgplsql cinsinden) kaydeder misiniz? –

+0

@ LukasEder bitti, ben de 'boolean' değerini döndürmeyi denedim, problem şu ki, jdbc, özel 'call' sözdizimi tarafından CallableStatement –

cevap

1

select [function call] sözdizimi son 1208/09/04 postgres jdbc sürücüsü tarafından desteklenmektedir. 9.4.1205 versiyonunu kullanıyordum.

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

saklanan fonksiyon void dönerse kullanabilirsiniz:

en son (1208/09/04) jdbc sürücüsü kullanıyorsanız saklanan işlev bazı değerini döndürürse

aşağıdaki sözdizimini kullanabilirsiniz

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

ile kullanılmıyorsa, saklı işlev çağrılarını ele alamıyor. Routines.foo kullanmak için (bazıParam) 'saklanan fonksiyonun 'void' dışında bir değer döndürmesi gerekir. Jooq, saklanan işlev 'void' değerini döndürürse, 'Routines' sınıfında yardımcı yöntemler üretmez. –