java - Postgresql 从表中返回 SETOF 行

标签 java database postgresql stored-procedures

我在 DBMS (Postgresql) 中有这个存储过程

CREATE OR REPLACE FUNCTION getallentree()
  RETURNS SETOF entree AS
$BODY$
begin 
   select * from entree ; 
end;
$BODY$
  LANGUAGE plpgsql 

调用此过程后:

select *  from getAllEntree(); 

我收到此错误:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function getallentree() line 3 at SQL statement

********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function getallentree() line 3 at SQL statement

最佳答案

对于这样简单的查询,最好使用 SQL 函数。与 PL/pgSQL 函数相比,查询优化器可以内联它们并对其进行更好的优化:

CREATE OR REPLACE FUNCTION getallentree()
  RETURNS SETOF entree AS
$BODY$
   select * from entree ; 
$BODY$
  LANGUAGE sql;

如果您确实需要 PL/pgSQL 进行其他一些您没有向我们展示的处理,那么 Mureinik 关于使用返回查询的回答就是正确的选择。

关于java - Postgresql 从表中返回 SETOF 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958526/

相关文章:

java - Spring Web Mvc REST 验证

sql - 任何开源工具来比较 xml 和数据库行?

sql - PostgreSQL:错误:关系列不存在

sql - 在 postgreSQL 中向左填充零

sql - 处理生成列上的 pg_error

java - OOoBeans 死了吗? - 我有什么选择?

java - 切换完成后再次显示 java 控制台菜单

java - Apache POI - 合并 pptx 时出错

Django 数据库查询以选择列中的所有值

sql - 带有 LIMIT 的 PostgreSQL 窗口函数