我正在尝试在plpgsql函数中循环使用整数数组(integer[]
)。像这样:
declare
a integer[] = array[1,2,3];
i bigint;
begin
for i in a
loop
raise notice "% ",i;
end loop;
return true;
end
在我的实际用例中,整数数组a
作为参数传递给函数。我收到此错误:
ERROR: syntax error at or near "$1" LINE 1: $1
如何正确遍历数组?
Postgres 9.1 添加了FOREACH
来循环数组:
DO
$do$
DECLARE
_arr int[] := '{1,2,3,4}';
_elem int; -- matching element type
BEGIN
FOREACH _elem IN ARRAY _arr
LOOP
RAISE NOTICE '%', _elem;
END LOOP;
END
$do$;
db<>小提琴在这里
也适用于多维数组:Postgres 展平数组并迭代所有元素。要循环访问切片,请参阅下面的链接。
对于旧版本:
FOR i IN 1 .. array_upper(_arr, 1) -- "i" is the index
LOOP
RAISE NOTICE '%', _arr[i]; -- single quotes
END LOOP;
有关多维数组和循环数组切片,请参阅:
- 在 plpgsql 中循环数组维度
但是,具有generate_series()
或unnest()
的基于集的解决方案通常比循环大集合更快。基本示例:
- PostgreSQL:频率表扩展
- 在开始日期和结束日期之间选择每个月