Postgresql函数返回多行

前端之家收集整理的这篇文章主要介绍了Postgresql函数返回多行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在主查询添加一个函数.主查询有where子句和’IN'(例如:where id IN(3,4,2))我需要一个函数插入到这个IN中,返回所需的id.

CREATE OR REPLACE FUNCTION getItemID(groupid integer)   
 RETURNS SETOF item AS  $BODY$
 BEGIN
      RETURN QUERY 
      SELECT item_id
      FROM item
      WHERE group_id=groupid  
 END; $BODY$
 LANGUAGE plpgsql;  

 ALTER FUNCTION getItemID(groupid integer)  OWNER TO postgres;

这给了我一个错误

ERROR:  RETURN cannot have a parameter in function returning set; use RETURN NEXT at or near "QUERY" at character ...

但是,任何人都可以为此提供任何解决方案.我是一个非常新的功能蜜蜂.另外我需要测试函数返回的值是否正确.

解决方法

您可能使用不支持RETURN QUERY子句的旧Postgres.其他问题是事实,所以函数声明为RETURN SETOF record_type,但只返回标量值(所以可能存在主要问题)

使用Roman Pekar提到的sql函数或使用RETURN NEXT语句

CREATE OR REPLACE FUNCTION getItemID(groupid integer)   
RETURNS SETOF item AS  $BODY$
DECLARE r record;
BEGIN
  FOR r IN SELECT * FROM item WHERE group_id = $1
  LOOP
    RETURN NEXT r;
  END LOOP;
END;
$BODY$
LANGUAGE plpgsql;

要么

CREATE OR REPLACE FUNCTION getItemID(groupid integer)
RETURNS SETOF int AS $$
DECLARE _id item.itemid%TYPE;
BEGIN
   FOR _id IN SELECT item_id FROM item WHETE group_id = $1
   LOOP
     RETURN NEXT _id;
   END LOOP;
   RETURN;
END;
$$LANGUAGE plpgsql;

对于此用例,sql函数更好.取决于你做了什么,以及你的系统的预期性能,但这些小(包装)功能通常不是一个好主意.创建实现某些业务的功能.

猜你在找的Postgre SQL相关文章