CREATE OR REPLACE FUNCTION fnMyFunction(recipients recipient[]) ...
FOREACH v_recipient IN ARRAY recipients
LOOP
v_total := v_total + v_recipient.amount;
INSERT INTO tmp_recipients(id, amount)
VALUES(v_recipient.id, v_recipient.amount::numeric(10,2));
END LOOP;
...
这在开发环境中效果很好,但刚刚发现发布环境是 8.4,它似乎不支持 FOREACH 构造。我希望有人可以通过数组参数集并以类似的方式使用数组中的值来避免完全重构,从而对循环的替代实现有所了解。
我收到的错误消息是:
错误:“FOREACH”SQL 状态或附近的语法错误:42601 上下文:PL/PgSQL 函数“fnMyFunction”中的 SQL 语句靠近行 ##
db 环境位于共享主机上,因此我没有平台升级选项。
我标记了 postgres 9.1 和 8.4,因为该功能在 9.x 中正常工作,但在 8.4 中失败。