Postgres - array for loop

匿名 (未验证) 提交于 2019-12-03 09:05:37

问题:

I am writing a plpgsql script.
I want to get the array contents one by one from a two dimension array.

DECLARE   m varchar[];   arr varchar[][] := array[['key1','val1'],['key2','val2']]; BEGIN   for m in select arr   LOOP     raise NOTICE '%',m;   END LOOP; END; 

But the above code returns

{{key1,val1},{key2,val2}} 

in one line. I want to be able to loop over and call another function which takes parameters like:

another_func(key1,val1) 

回答1:

Since PostgreSQL 9.1 there is the convenient 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$ 

Solution for older versions:

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$ 

Also, there is no difference between varchar[] and varchar[][] for the PostgreSQL type system. I explain in more detail here.

The DO statement requires at least PostgreSQL 9.0, and LANGUAGE plpgsql is the default (so you can omit the declaration).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!