从用户定义的函数 JOOQ 查询

use*_*875 5 java sql postgresql jooq

我正在寻找从用户定义的函数进行查询。select我见过的所有示例都是以参数形式查询函数

myFunction.setMyParam("plapla");
create.select(myFunction.asField()).fetch();
Run Code Online (Sandbox Code Playgroud)

尽管结果实际上是多列,但这会将结果作为一列返回。

我想做的是

myFunction.setMyParam("plapla");
create.select().from(myFunction).fetch();
Run Code Online (Sandbox Code Playgroud)

但我还没有找到办法这样做......

目前我正在使用

DSL.using(create.configuration())
                .select()
                .from("myFunction('" + myparam + "')")
                .fetch();
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个好的解决方案(未转义、未经处理等)

如何使用JOOQ生成的函数来做到这一点?

Luk*_*der 1

jOOQ 生成 PostgreSQL 表值函数的函数调用。如果你的函数如下所示:

CREATE FUNCTION my_function(text, integer, text)
RETURNS TABLE (myParams text) AS ...
Run Code Online (Sandbox Code Playgroud)

然后 jOOQ 产生以下方法:

public class Tables {
    ...
    public static MyFunction myFunction(String param1, Integer param2, String param3) 
    { ... }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以这样调用:

Result<MyFunctionRecord> result =
DSL.using(create.configuration())
   .selectFrom(myFunction("a", 1, "b")
   .fetch();
Run Code Online (Sandbox Code Playgroud)

结果记录将采用以下形式:

public class MyFunctionRecord {
    ...
    public String getMyParams() { ... }
}
Run Code Online (Sandbox Code Playgroud)