arrays - Iteración sobre entero[] en PL/pgSQL
postgresql loops (1)
DECLARE
a integer[] := array[1,2,3];
i integer; -- int, not bigint!
BEGIN
FOR i IN 1 .. array_upper(a, 1)
LOOP
RAISE NOTICE ''%'', a[i]; -- single quotes!
END LOOP;
RETURN TRUE;
END
O pruebe el nuevo FOREACH
en PostgreSQL 9.1 :
FOREACH i IN ARRAY a
LOOP
RAISE NOTICE ''%'', i;
END LOOP;
Sin embargo, las soluciones basadas en conjuntos con generate_series()
o unnest()
suelen ser más rápidas que los bucles para grandes conjuntos.
Ejemplos básicos:
- PostgreSQL: Expansión de tabla de frecuencias
- Seleccione cada mes entre una fecha de inicio y finalización
Busque en las etiquetas generate-series o unnest para obtener más información.
Estoy intentando recorrer un conjunto integer[]
( integer[]
) en una función plpgsql. Algo como esto:
declare
a integer[] = array[1,2,3];
i bigint;
begin
for i in a
loop
raise notice "% ",i;
end loop;
return true;
end
En mi caso de uso real, la matriz entera a
se pasa como parámetro a la función. Me sale este error:
ERROR: syntax error at or near "$1" LINE 1: $1
¿Cómo recorrer la matriz correctamente?