PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Iterazione su intero[] in 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$;

O più semplice con FOREACH in PostgreSQL 9.1 o successivo:

   FOREACH i IN ARRAY a
   LOOP 
      RAISE NOTICE '%', i;
   END LOOP;

Per gli array multidimensionali vedere:

  • Cicla sulla dimensione dell'array in plpgsql

Tuttavia, soluzioni basate su insiemi con generate_series() o unnest() sono spesso più veloci del looping su grandi set. Esempi di base:

  • PostgreSQL:espansione della tabella delle frequenze
  • Seleziona ogni mese tra una data di inizio e di fine

Cerca i tag generate-series o unnest per altri.