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

Loop over matrixdimension i plpgsql

Siden PostgreSQL 9.1 der er den praktiske FOREACH :

DO
$do$
DECLARE
   m   varchar[];
   arr varchar[] := array[['key1','val1'],['key2','val2']];
BEGIN
   FOREACH m SLICE 1 IN ARRAY arr
   LOOP
      RAISE NOTICE 'another_func(%,%)',m[1], m[2];
   END LOOP;
END
$do$

Løsning til ældre versioner :

DO
$do$
DECLARE
   arr varchar[] := '{{key1,val1},{key2,val2}}';
BEGIN
   FOR i IN array_lower(arr, 1) .. array_upper(arr, 1)
   LOOP
      RAISE NOTICE 'another_func(%,%)',arr[i][1], arr[i][2];
   END LOOP;
END
$do$

Desuden er der ingen forskel mellem varchar[] og varchar[][] til PostgreSQL-systemet. Jeg forklarer mere detaljeret her.

DO sætning kræver mindst PostgreSQL 9.0 og LANGUAGE plpgsql er standard (så du kan udelade erklæringen).




  1. SQL Server:Kolonner til rækker

  2. hvordan man laver en tabel i oracle

  3. Brug flere konfliktmål i ON CONFLICT-klausulen

  4. newid() inde i sql-serverfunktionen