📖💡 Datenbank-Programmierung
Durch die ISO-Norm für SQL/PSM (Persistent Stored Modules) wurde SQL um die Mächtigkeit einer strukturierten Programmiersprache erweitert, welche sich in SQL einbetten lässt und ihrerseits wieder SQL-Anweisungen einbettet. Die Hauptobjekte dieser persistenten Module sind:
Funktionen
Prozeduren
Trigger
Bei all diesen Objekten handelt es sich um eigenständige Objekte in einer Datenbank. Zudem kennt die SQL-Erweiterung Kontrollstrukturen (für die Ablaufsteuerung) sowie lokale und globale Variablen. Die nachfolgenden Ausführungen geben einen kleinen Einblick in die SQL/PSM-Konstrukte.
Variablen
Es gibt lokale und globale Variablen.
Globale Variablen sind vordefiniert und beginngn mit @@
.
Ein Beispiel für eine vordefinierte globale Variabel ist @@Error
: Diese wird nach jeder SQL- Anweisung mit einem Wert belegt. Jeder Wert bedeutet eine Warnung oder einen Fehler, wobei 0 "no problem" heisst. Da @@Error
eine globale Variable ist, kann sie immer und überall aufgerufen werden.
Lokale Variabeln kann man selber deklarieren und beginnen mit @
.
Im Gegensatz zu den globalen sind lokale Variablen nur innerhalb eines Stapels oder einer Prozedur gültig. Von aussen kann auf diese nicht zugegriffen werden. Deklariert werden sie mit DECLARE
, belegt mit SET
oder SELECT
.
Prozeduren
Prozeduren funktionieren in der Regel nach dem Prinzip: Ich rufe dir etwas, gebe dir etwas mit, bekomme nichts zurück. Benutzerdefinierten Prozeduren werden beim Aufruf keine, ein oder mehrere Argumente übergeben (Werte oder Aktualparameter). Im Gegensatz zu Funktionen geben Prozeduren in den meisten Fällen keine Rückgabe aus.
Expliziter Aufruf erfolgt mit EXEC
. Argumente werden ohne Klammern übergeben.
Syntax bei SQL Server:
Für Aktualparameter werden keine Klammern verlangt.
Ein allfälliger Rückgabe-Wert muss ausserhalb der Prozedur in einer (anderen) Variablen abgefangen (DECLARE
) und könnte so in die weitere Verarbeitung einbezogen werden.
Benutzerdefinierte Funktionen
Neben den bereits kennengelernten vordefinierten Funktionen können auch benutzerdefinierte Funktionen angelegt werden. Wie den Prozeduren können Funktionen keine, ein oder mehrere Argumente (Aktualparameter) übergeben werden. Rückgabe der Funktion ist genau ein Wert.
Syntax bei SQL Server:
Die RETURNS
Deklaration ist Pflicht, ebenso wie die RETURN
Anweisung im function_body.
BEGIN
und END
sind optional, aber empfohlen.
Der Aufruf von Funktionen ist Bestandteil einer SELECT
-Anweisung oder eines mathematischen Ausdrucks. Klammern werden immer benötigt, auch wenn keine Argumente übergeben werden.
Kontrollstrukturen
Ein Anweisungsblock wird mit BEGIN ... END
definiert.
Anweisung
Erklärung
IF .. ELSE
definiert eine bedingte Ausführung und eine (optionale) Alternative (ELSE).
RETURN
bewirkt einen unbedingten Abbruch und gibt unter Umständen einen Wert zurück.
WHILE
wiederholt Anweisungen, solange eine bestimmte Bedingung gleich TRUE ist.
BREAK
verlässt die innerste Schleife in einer WHILE-Anweisung oder einer IF...ELSE- Anweisung innerhalb einer WHILE-Schleife.
CASE
ermöglicht eine Art Mehrfachauswahl. Bei CASE handelt es sich jedoch um einen Ausdruck und nicht um eine Anweisung:
CASE WHEN ... THEN ... ELSE ... END
💡Aufgaben
Lade die SQL Datei herunter und löse die Aufgaben für Funktionen und Trigger:
Trigger
Beim Trigger handelt es sich um ein persistentes, prozedurales Modul, das durch eine Ereignis automatisch und unsichtbar ausgelöst ("gefeuert", "getriggert") wird. Mögliche Ereignisse sind:
INSERT
UPDATE
DELETE
Trigger werden oft benutzt zur Sicherung der relationalen und sonstigen Einschränkungen (Constraints). Sie dienen oft zur Prüfung bzw. Sicherung der Integrität und Konsistenz (Stichwort prozedurale Integrität) und können auch als Hilfe zum Führen des Tagebuchs eingesetzt werden: Wer hat z.B. wann was gelöscht? Trigger werden oft eingesetzt, um Plausibilitäten zu prüfen und Geschäftsregeln durchzusetzen. Trigger feuern meistens mehrere DML-Anweisungen und laufen als Ganzes atomar.
Trigger werden nicht direkt (explizit) aufgerufen. Trigger werden keine Argumente übergeben, ebenso geben sie keine Rückgabewerte aus.
Syntax bei SQL Server:
Trigger werden durch Ereignisse (verbunden auf Tabellen und Sichten) ausgelöst.
FOR
undAFTER
Trigger (Synonyme) feuern, nachdem die das Ereignis auslösende SQL-Anweisung ihre Wirkung vollständig getan hat.
INSTEAD OF
Trigger treten anstelle der Operation in Kraft, fangen die feuernde SQL-Anweisung ab und verhindern sie, legen aber eine logische Tabelle an. In Kombination mit
DELETE
wird die logische Tabelle "deleted" gefüllt, um zu sehen, was gelöscht werden würde. Dasselbe Prinzip gilt auf fürINSERT
: Hier kennt die logische Tabelle "inserted" alle Zeilen, die vonINSERT
(oder auchUPDATE
) betroffen wären und persistiert werden wollen.
💡Aufgaben
Löse jetzt noch die Aufgaben für Trigger aus der Aufgaben-Datei, die du oben schon heruntergeladen hast.
Last updated
Was this helpful?