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).