Har*_*eet 45 arrays postgresql for-loop plpgsql multidimensional-array
在plpgsql中,我想从二维数组中逐个获取数组内容.
DECLARE
m varchar[];
arr varchar[][] := array[['key1','val1'],['key2','val2']];
BEGIN
for m in select arr
LOOP
raise NOTICE '%',m;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
但上面的代码返回:
{{key1,val1},{key2,val2}}
Run Code Online (Sandbox Code Playgroud)
在一条线上.我希望能够循环并调用另一个函数,该函数采用如下参数:
another_func(key1,val1)
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 99
从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$
Run Code Online (Sandbox Code Playgroud)
旧版本的解决方案:
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$
Run Code Online (Sandbox Code Playgroud)
此外,也没有什么区别varchar[]
,并varchar[][]
为PostgreSQL的类型系统.我在这里详细解释一下.
该DO
语句至少需要PostgreSQL 9.0,并且LANGUAGE plpgsql
是默认语句(因此您可以省略声明).
归档时间: |
|
查看次数: |
95840 次 |
最近记录: |