postgresql返回表中的行集合

vatpfxk5  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(381)

我在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
ebdffaop

ebdffaop1#

对于这样一个简单的查询,最好使用sql函数。与pl/pgsql函数相比,查询优化器可以内联并更好地优化它们:

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

如果您确实需要pl/pgsql来进行其他一些您没有向我们展示的处理,那么mureinik关于使用 return query 是一条路要走。

nxagd54h

nxagd54h2#

你只需要加上 return query 给你的 select 声明:

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

相关问题