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

UDFs und Basis-SQL

Bisher haben wir Abfragen vom Node.js-Server gesendet. Aber wenn eine Formel in Dutzenden verschiedener Abfragen verwendet wird (z. B. zur Berechnung des Endpreises einschließlich Mehrwertsteuer), warum sollte man dann die Mathematik in JavaScript duplizieren? SQL-Funktionen (benutzerdefinierte Funktionen – UDF) ermöglichen es uns, „Makros“ innerhalb der Datenbank selbst zu erstellen.

So erstellen Sie ein mathematisches SQL-Makro:

SQL
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
  SELECT price * 1.22;
$$ LANGUAGE sql;

Sobald dieser Befehl ausgeführt wird, verbleibt die Funktion für immer in unserer Datenbank. Es kann aus jeder Abfrage aufgerufen werden:

SQL
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;

Dynamische Erstellung

Wir können so viele Variablen definieren, wie wir möchten, und ihre Typen angeben. LANGUAGE sql führt dann die Abfrage aus und gibt implizit die letzte Anweisung zurück, die zwischen den Dollarzeichen $$ steht.

Probieren Sie es selbst aus

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

Erstellen Sie eine einfache aufrufbare Funktion mit dem Namen „get_full_name“, die zwei TEXT-Parameter akzeptiert („first_name“ TEXT, „last_name“ TEXT). Sie muss einen TEXT-Wert zurückgeben. Führen Sie im Inneren ein triviales SELECT aus, das die beiden Argumente mit einem einzelnen Leerzeichen dazwischen verkettet, und deklarieren Sie es als Sprach-SQL.

Editor wird geladen…
Hinweis anzeigen

ERSTELLEN ODER ERSETZEN DER FUNKTION get_full_name(first_name TEXT, last_name TEXT) RETURNS TEXT AS $$ SELECT first_name || ' ' || Nachname; $$ LANGUAGE sql;

Lösung nach 3 Versuchen verfügbar

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

In fortgeschritteneren UDFs können wir ganze Abfragen einbetten. Erstellen Sie eine Funktion „get_customer_count()“, die keine Parameter akzeptiert und eine Ganzzahl zurückgibt. Führen Sie darin ein triviales „SELECT COUNT(id) FROM customer“ aus. Deklarieren Sie es als reine SQL-Sprache.

Editor wird geladen…
Hinweis anzeigen

Achtung: COUNT gibt einen Bigint zurück, wandeln Sie ihn in INTEGER um, um ihn an den Rückgabetyp anzupassen! ERSTELLEN ODER ERSETZEN DER FUNKTION get_customer_count() RETURNS INTEGER AS $$ SELECT CAST(COUNT(id) AS INTEGER) FROM customer; $$ LANGUAGE sql;

Lösung nach 3 Versuchen verfügbar