Postgresql函数返回多行
发布时间:2020-12-13 15:50:29 所属栏目:百科 来源:网络整理
导读:我需要在主查询中添加一个函数.主查询有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
我需要在主查询中添加一个函数.主查询有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函数更好.取决于你做了什么,以及你的系统的预期性能,但这些小(包装)功能通常不是一个好主意.创建实现某些业务的功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |