sql >> Base de Datos >  >> RDS >> PostgreSQL

Iterando sobre entero[] en 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 más simple con FOREACH en PostgreSQL 9.1 o posterior:

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

Para matrices multidimensionales, consulte:

  • Recorra la dimensión de la matriz en plpgsql

Sin embargo, las soluciones basadas en conjuntos con generate_series() o unnest() a menudo son más rápidos que recorrer conjuntos grandes. Ejemplos básicos:

  • PostgreSQL:expansión de la tabla de frecuencias
  • Seleccione cada mes entre una fecha de inicio y finalización

Busque las etiquetas de generar series o anular para obtener más.