Postgres – 数组for循环
我在写一个plpgsql脚本。
我想从二维数组中逐个获取数组内容。
DECLARE m varchar[]; arr varchar[][] := array[['key1','val1'],['key2','val2']]; BEGIN for m in select arr LOOP raise NOTICE '%',m; END LOOP; END;
但是上面的代码返回
{{key1,val1},{key2,val2}}
在一行中。 我想能够循环,并调用另一个函数,它需要像这样的参数:
another_func(key1,val1)
由于PostgreSQL 9.1有一个方便的FOREACH
:
DO $do$ DECLARE m varchar[]; arr varchar[] := array[['key1','val1'],['key2','val2']]; BEGIN FOREACH m SLICE 1 IN ARRAY arr LOOP RAISE NOTICE 'another_func(%,%)',m[1], m[2]; END LOOP; END $do$
旧版本的解决scheme:
DO $do$ DECLARE arr varchar[] := '{{key1,val1},{key2,val2}}'; BEGIN FOR i IN array_lower(arr, 1) .. array_upper(arr, 1) LOOP RAISE NOTICE 'another_func(%,%)',arr[i][1], arr[i][2]; END LOOP; END $do$
此外,PostgreSQLtypes系统的varchar[]
和varchar[][]
之间没有区别。 我在这里更详细地解释。
DO
语句至less需要PostgreSQL 9.0, LANGUAGE plpgsql
是默认的(所以你可以省略声明)。