我希望从用户定义的函数中查询。我见过的所有例子都是将函数作为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生成的函数来完成它?
答案 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() )
我希望正确生成表值函数,因为上面的答案更好,但这将同时起作用。