sql >> Database >  >> RDS >> PostgreSQL

Itereren over integer[] 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$;

Of eenvoudiger met FOREACH in PostgreSQL 9.1 of hoger:

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

Zie voor meerdimensionale arrays:

  • Loop over array-dimensie in plpgsql

Echter, set-gebaseerde oplossingen met generate_series() of unnest() zijn vaak sneller dan het doorlopen van grote sets. Basisvoorbeelden:

  • PostgreSQL:Uitbreiding frequentietabel
  • Selecteer elke maand tussen een begin- en einddatum

Zoek in de tags Genereer-serie of Unnes voor meer.




  1. Hoe schrijf ik een Oracle Insert-script met één veld als CLOB?

  2. Een big data dilemma:hardware of software ... apparaten ...

  3. Hoe gebruik ik de CONCAT-functie in SQL Server 2008 R2?

  4. De voordelen van het indexeren van buitenlandse sleutels