PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Iterando sobre integer[] em PL/pgSQL

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.