Kontrollfluss

Eine der Grundlegenden Operationen ist if-then-else:

CREATE OR REPLACE FUNCTION kleiner_als_sechs(i int) RETURNS bool AS $$
BEGIN
  IF i < 6 THEN
    RETURN FALSE;
  ELSE
    RETURN TRUE;
  END IF;
END;
$$ LANGUAGE plpgsql;

In PL/pgSQL kommt nach dem IF ein beliebiges SQL-Prädikat (denken Sie an das, was in der WHERE-Klausel stehen kann). Im Gegensatz zu den geschweiften Klammern bei Java wird hier mit einem THEN der Rumpf eingeleitet und mit END IF abgeschlossen.

Wenn Sie mehrere Prädikate testen wollen, können Sie dies mit ELSIF machen:

IF i < 0 THEN
  RETURN -1;
ELSIF i = 0 THEN
  RETURN 0;
ELSE
  RETURN 1;
END IF;

In diesen Beispielen haben Sie auch gesehen, dass man mit RETURN Werte zurückgeben kann. Passiert dies nicht, das heißt, erreicht eine nicht-void Funktion das END; ohne ein RETURN zu sehen, wirft Postgres einen Laufzeitfehler.

Mit einer FOR-Schleife iteriert man über Listen oder Tabellen.

CREATE OR REPLACE FUNCTION matsum() RETURNS int AS $$
DECLARE
  akku INT := 0;
  val INT := 0;
BEGIN
  FOR val IN SELECT matrnr FROM studenten LOOP
    akku = akku + val;
  END LOOP;
  RETURN akku;
END;
$$ LANGUAGE plpgsql;

Sie können beliebig komplexe Anfragen zwischen IN und LOOP schreiben und über deren Ergebnis iterieren.

results matching ""

    No results matching ""