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.
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
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.
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
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“.
Hinweis anzeigen
DECLARE nome_utente TEXT; BEGIN SELECT first_name INTO nome_utente... RETURN 'Ciao ' || nome_utente;
Lösung nach 3 Versuchen verfügbar