从用户定义函数 JOOQ 查询

Query from user defined function JOOQ

我想从用户定义的函数中查询。我见过的所有示例都将函数查询为 select 参数

myFunction.setMyParam("plapla");
create.select(myFunction.asField()).fetch();

这个 return 结果是一列,尽管结果实际上是多列。

我想做的是

myFunction.setMyParam("plapla");
create.select().from(myFunction).fetch();

但是我还没有找到这样做的方法...

目前我正在使用

DSL.using(create.configuration())
                .select()
                .from("myFunction('" + myparam + "')")
                .fetch();

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

如何使用 JOOQ 生成函数来实现?

jOOQ 为 PostgreSQL table 值函数生成函数调用。如果您的函数如下所示:

CREATE FUNCTION my_function(text, integer, text)
RETURNS TABLE (myParams text) AS ...

然后jOOQ产生如下方法:

public class Tables {
    ...
    public static MyFunction myFunction(String param1, Integer param2, String param3) 
    { ... }
}

然后您可以这样调用:

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

结果记录的格式为:

public class MyFunctionRecord {
    ...
    public String getMyParams() { ... }
}

由于臭名昭著的

,我不得不暂时关闭生成 table 值函数

java: variable XYZ is already defined in class

我能够像这样完成以上操作

create
    .selectFrom( Routines.myFunction(myparam).toString() )

我希望能够正确生成 table 值函数,因为上面的答案更好,但这同时会起作用。