sql - Postgresql 函数返回多行

标签 sql 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 ...  

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

最佳答案

您使用的旧 Postgres 可能不支持 RETURN QUERY 子句。另一个问题是事实,因此函数被声明为 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 函数更好。取决于你做什么,以及系统的预期性能,但这些小(包装)功能通常不是好主意。相反,创建实现某些业务的功能。

关于sql - Postgresql 函数返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782462/

相关文章:

sql - 在 Case 语句中进行类型转换

sql - 更新 SELECT 输出的行的列

postgresql - postgres - 防止规则/触发器调用自己 - 无限循环

sql - postgresql中的唯一随机整数

json - 将 epgsql 结果转换为 JSON

ruby-on-rails - ActiveRecord::NoDatabaseError fatal error :数据库 "db/development.postgresql"不存在

php - Mysql查询按日期分隔的元素组

sql - 如何使用 BigQuery 按月-年分组

mysql - 如何更改 mysql 中浮点值的精度?

sql - 从 SQL Server 表中检索缩写