gpt4 book ai didi

sql - Postgresql 函数返回多行

转载 作者:行者123 更新时间:2023-11-29 11:39:45 24 4
gpt4 key购买 nike

我需要在我的主查询中添加一个函数。主查询有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com