Plpgsqlでは、2次元配列から配列の内容を1つずつ取得します。
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)
PostgreSQL9.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$
古いバージョンの解決策:
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$
また、PostgreSQLタイプシステムのvarchar[]
とvarchar[][]
の間に違いはありません。もっと詳しく説明します こちら 。
DO
ステートメントには少なくともPostgreSQL 9.0が必要であり、LANGUAGE plpgsql
がデフォルトです(したがって、宣言を省略できます)。