从用户定义的函数JOOQ查询

时间:2016-09-01 14:43:57

标签: java sql postgresql jooq

我希望从用户定义的函数中查询。我见过的所有例子都是将函数作为select参数

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

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

我想做的是

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

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

目前我正在使用

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

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

如何使用JOOQ生成的函数来完成它?

2 个答案:

答案 0 :(得分:1)

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

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() { ... }
}

答案 1 :(得分:0)

由于臭名昭著,我不得不暂时关闭生成表值函数

java:变量XYZ已在类中定义

我能够完成上述任务

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

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