CREATE OR REPLACE FUNCTION "PC_GetORGINFO"() RETURNS SETOF "ORG_INFO" AS $BODY$ DECLARE r "ORG_INFO"%rowtype; BEGIN for r in select "ID","ORGNAME" from "ORG_INFO" loop return next r; end loop; return; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION "PC_GetORGINFO"() OWNER TO postgres; 我的存储过程ORG_INFO是表名
错误信息我看了~ ERROR [0A000] Error while executing the query; ERROR: set-valued function called in context that cannot accept a set 背景: PL/pgSQL function "PC_GetMONITOR_POINT_INFO" line 7 at return next 我在他的机器上随便用一个没有返回的存储过程就正确~但是用返回return next的就错误,看了原因,说是没有返回类型? 但是我的返回类型就是那个表~ 求原因
RETURNS SETOF "ORG_INFO" AS
$BODY$
DECLARE
r "ORG_INFO"%rowtype;
BEGIN
for r in select "ID","ORGNAME" from "ORG_INFO"
loop
return next r;
end loop; return;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION "PC_GetORGINFO"() OWNER TO postgres;
我的存储过程ORG_INFO是表名
ERROR [0A000] Error while executing the query;
ERROR: set-valued function called in context that cannot accept a set
背景: PL/pgSQL function "PC_GetMONITOR_POINT_INFO" line 7 at return next
我在他的机器上随便用一个没有返回的存储过程就正确~但是用返回return next的就错误,看了原因,说是没有返回类型?
但是我的返回类型就是那个表~
求原因
所以不是服务端的问题。最大的可能是接口问题。
你的那台能用call调用成功,说明你的接口具有将call转换为select的这个功能。而另外那台的接口可能和你的不一样,(如版本等),缺乏这种转换功能,所以出错了。解决方法:全部改为select语句,不要让接口做太多的工作。这是最好的解决方法。