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.