arrays - manejo - sql array postgresql
Lazo sobre la dimensiĆ³n de la matriz en plpgsql (1)
En plpgsql, quiero obtener los contenidos de la matriz uno por uno desde una matriz de dos dimensiones.
DECLARE
m varchar[];
arr varchar[][] := array[[''key1'',''val1''],[''key2'',''val2'']];
BEGIN
for m in select arr
LOOP
raise NOTICE ''%'',m;
END LOOP;
END;
Pero el código anterior regresa:
{{key1,val1},{key2,val2}}
en una linea Quiero ser capaz de repetir y llamar a otra función que toma parámetros como:
another_func(key1,val1)
Desde PostgreSQL 9.1 existe la conveniente 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$
Solución para versiones anteriores :
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$
Además, no hay diferencia entre varchar[]
y varchar[][]
para el sistema de tipo PostgreSQL. Explico con más detalle here .
La declaración DO
requiere al menos PostgreSQL 9.0, y LANGUAGE plpgsql
es el valor predeterminado (para que pueda omitir la declaración).