Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从匿名PL/pgSQL块返回结果?_Java_Sql_Hibernate_Postgresql - Fatal编程技术网

Java 如何从匿名PL/pgSQL块返回结果?

Java 如何从匿名PL/pgSQL块返回结果?,java,sql,hibernate,postgresql,Java,Sql,Hibernate,Postgresql,我使用的PostgreSQL版本是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"

我使用的PostgreSQL版本是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();
如何重写查询以返回实际结果?

根据,DO语句不能返回任何内容:

代码块被视为函数体 如果没有参数,返回void


如果DO中的代码用于生成行,则可以将它们放入临时表中,并让客户端从该表中进行选择。

我正在寻找的解决方案是:

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();
CREATE FUNCTION res()将partner.partner\u统计信息的集合返回为$$
>
声明
r合作伙伴。合作伙伴统计%rowtype;
表_name varchar默认值“partner.partner_statistic”;
开始
对于r IN
从partner.partner\u统计偏移量0限制100中选择*
环
返回下一个r;
端环;
回来
终止
$$语言plpgsql;
选择*FROM res();
相关文件参考

更新: 正如没有名字的@a_horse_在评论中所说,有更简单的解决方案:

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();
CREATE FUNCTION res()将partner.partner\u统计信息的集合返回为$$
>
声明
r合作伙伴。合作伙伴统计%rowtype;
表_name varchar默认值“partner.partner_statistic”;
开始
返回查询从partner.partner\u统计偏移量0限制选择*100
终止
$$语言plpgsql;
选择*FROM res();

检查文档:,特别是“使用结果集执行语句”一节。@GordonLinoff那么什么是正确的查询?重写查询的准确程度如何?如果需要,我可以创建一个函数吗?是的。然而,问题是关于“匿名PL/PgSQL块”,所以答案仍然是不可能的。不需要循环:一个简单的
返回查询…
就可以了。@A_horse_和\u No_名称你的意思是
返回选择*FROM partner.partner\u统计偏移量0 limit 100
?我试过了,但收到了
错误:RETURN不能在函数returning set中有参数
我的意思是
RETURN query select…
(不是
RETURN select…
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();