【发布时间】:2015-02-09 16:18:29
【问题描述】:
我有一个返回表的 Postgresql 函数
CREATE OR REPLACE FUNCTION test_func(IN param1 text, IN param2 integer)
RETURNS TABLE(result1 text, result2 integer) AS
$BODY$
BEGIN
result1 := 'aa';
result2 :=1;
return next;
result1 := 'bb';
result2 :=2;
return next;
END
$BODY$
LANGUAGE plpgsql
pg-admin 中的查询返回正确的结果
select * from test_func('aaa', 23);
result1 | result2
"aa" | 1
"bb" | 2
JOOQ 一如既往地生成函数
...
public class TestFunc extends org.jooq.impl.AbstractRoutine<java.lang.Void> {
...
public TestFunc() {
super("test_func", ee.tavex.tavexwise.db.public_.Public.PUBLIC);
addInParameter(PARAM1);
addInParameter(PARAM2);
addOutParameter(RESULT1);
addOutParameter(RESULT2);
}
...
在例程类中
...
public static ee.tavex.tavexwise.db.public_.routines.TestFunc testFunc(org.jooq.Configuration configuration, java.lang.String param1, java.lang.Integer param2) {
ee.tavex.tavexwise.db.public_.routines.TestFunc p = new ee.tavex.tavexwise.db.public_.routines.TestFunc();
p.setParam1(param1);
p.setParam2(param2);
p.execute(configuration);
return p;
}
我这样称呼它
TestFunc records = Routines.testFunc(dslConfiguration, "xx", 10);
records.getResults() //returns empty List
records.getResult1() //returns "aa"
records.getResult2() //returns 1
所以,它正确地返回了第一行的值,但是我怎样才能得到整个表呢?
(jooq 3.5.0)
【问题讨论】:
-
没有。我正在尝试使用 JOOQ 重新生成的例程提出请求。现在生成的与我得到的相同,当函数只返回一个记录时。我无法得到这里描述的结果jooq.org/doc/3.5/manual/sql-building/table-expressions/…
-
@user693442:你能展示一下你正在使用的 jOOQ 代码吗?您能否也显示函数体,以确保其中没有任何问题?
-
更新问题
-
感谢您的更新。有趣的是,我没有得到那个特定的
testFunc(Configuration, String, Integer)方法(see my answer)。可能有一个微妙的错误。你介意把它交给jOOQ User Group吗?更容易讨论进一步的步骤以查看可能导致错误的原因(可能是 PostgreSQL 版本?)
标签: postgresql jooq