Direkt zum Hauptinhalt springen
eLearner.app
Modul 12 · Lektion 2 von 446/57 im Kurs~15 min
Lektionen des Moduls (2/4)

Fortgeschrittene Logik mit PL/pgSQL

In LANGUAGE sql geschriebene Funktionen können Standardabfragen nur nacheinander ausführen. Wenn wir etwas Fortgeschritteneres benötigen, wie zum Beispiel „WENN die eingegebene Summe größer als 100 ist, DANN einen Rabatt anwenden“, kann reines SQL das nicht alleine tun. Wir müssen PL/pgSQL verwenden, eine vollwertige prozedurale Programmiersprache, die in Postgres integriert ist.

In PL/pgSQL fügen wir die klassischen Körper aus BEGIN .. END, Variablen und bedingten Anweisungen hinzu.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

Mit dieser Leistung können wir riesige Blöcke sich wiederholender Logik auslagern, die wir sonst in JS schreiben würden, und sie in sichere, schnelle Funktionen packen, die nahe an den Daten mit sehr geringer Latenz ausgeführt werden!

Probieren Sie es selbst aus

Übung#sql.m12.l2.e1
Versuche: 0Wird geladen…

Wir wollen eine komplexe Funktion, die sich selbst ersetzt, wenn sie bereits vorhanden ist („get_price_label“), „price“ als NUMERIC akzeptiert und einen ausführlichen TEXT zurückgibt. Verwenden Sie PL/pgSQL. Öffnen Sie BEGIN. Schreiben Sie die Logik: Wenn der Preis > 100,00 ist, geben Sie die Zeichenfolge „Premium“ zurück. ELSE gibt 'Economico' zurück. Schließen Sie das bedingte END; und der Körper.

Editor wird geladen…
Hinweis anzeigen

ERSTELLEN ODER ERSETZEN DER FUNKTION get_price_label(price NUMERIC) RETURNS TEXT AS $$ ANFANG WENN der Preis > 100,00 THEN RETURN 'Premium'; ELSE RETURN 'Economico'; ENDE WENN; ENDE; $$ SPRACHE plpgsql;

Lösung nach 3 Versuchen verfügbar

Übung#sql.m12.l2.e2
Versuche: 0Wird geladen…

Sie können temporäre Variablen vor BEGIN mit dem Schlüsselwort DECLARE deklarieren. Schreiben Sie eine Funktion „saluta_utente(userid INTEGER)“ -> Gibt TEXT zurück, PL/pgSQL-Logik. Darin DECLARE eine String-Variable „nome_utente TEXT;“. Dann füllen Sie diese Variable in BEGIN mit dem Vornamen, indem Sie „Kunden“ mithilfe der speziellen Klausel „SELECT Vorname INTO“ dynamisch abfragen nome_utente FROM... WHERE id = userid'. Schließlich verkettet RETURN die Variable mit „Ciao“.

Editor wird geladen…
Hinweis anzeigen

DECLARE nome_utente TEXT; BEGIN SELECT first_name INTO nome_utente... RETURN 'Ciao ' || nome_utente;

Lösung nach 3 Versuchen verfügbar