我正在编写一个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','val2']]; BEGIN FOREACH m SLICE 1 IN ARRAY arr LOOP RAISE NOTICE 'another_func(%,%)',m[1],m[2]; END LOOP; END $do$
旧版本的解决方案:
DO $do$ DECLARE arr varchar[] := '{{key1,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$
此外,Postgresql类型系统的varchar []和varchar [] []之间没有区别。我更详细地解释了here。