DO
$do$
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;
END
$do$;
Ou mais simples com
FOREACH
no PostgreSQL 9.1 ou posterior: FOREACH i IN ARRAY a
LOOP
RAISE NOTICE '%', i;
END LOOP;
Para matrizes multidimensionais, consulte:
- Loop sobre a dimensão do array em plpgsql
No entanto, soluções baseadas em conjuntos com
generate_series()
ou unnest()
geralmente são mais rápidos do que fazer loops em grandes conjuntos. Exemplos básicos:- PostgreSQL:expansão da tabela de frequência
- Selecione cada mês entre uma data de início e término
Pesquise as tags generate-series ou unnest para mais.