PostgreSQL版本I使用的是9.3。
我编写了一个包含以下块的代码:
String queryString = "do $$\n"
+ "<< outerblock >>\n"
+ "DECLARE\n"
+ "table_name varchar DEFAULT 'partner.partner_statistic';\n"
+ "BEGIN\n"
+ "EXECUTE 'SELECT * FROM ' || table_name;\n"
+ "END;\n"
+ "$$ LANGUAGE plpgsql; \n";
Query query = getSession().createSQLQuery(queryString);
List l = query.list();
在调试器中,我收到消息:
[org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:78)] :查询未返回任何结果。
在
行List l = criteria.list();
如何重写查询以返回实际结果?
答案 0 :(得分:1)
我正在寻找的解决方案是:
CREATE FUNCTION res() RETURNS SETOF partner.partner_statistic AS $$
<< outerblock >>
DECLARE
r partner.partner_statistic%rowtype;
table_name varchar DEFAULT 'partner.partner_statistic';
BEGIN
FOR r IN
SELECT * FROM partner.partner_statistic offset 0 limit 100
LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM res();
相关文档参考为here。
<强>更新强> 正如@a_horse_with_no_name在评论中所说,有更简单的解决方案可以做到这一点:
CREATE FUNCTION res() RETURNS SETOF partner.partner_statistic AS $$
<< outerblock >>
DECLARE
r partner.partner_statistic%rowtype;
table_name varchar DEFAULT 'partner.partner_statistic';
BEGIN
RETURN QUERY SELECT * FROM partner.partner_statistic offset 0 limit 100
END;
$$ LANGUAGE plpgsql;
SELECT * FROM res();
答案 1 :(得分:0)