💻
M105 - Datenbanken mit SQL bearbeiten
  • Intro
  • 🗓️Organisatorisches
  • 🛠️Infrastruktur und Tools
  • ❓FAQ
  • Tag 1
    • 🏁Tagesziele
    • 📖💡 Datenbanklehre
    • 📖💡 DDL – Data Definition Language
    • 📖💡 DDL - Constraints
    • 💬Northwind Sample Database
    • 📖DML - Datenmanipulation
    • ❓Hilfsmittel
      • ❓Datentypen
  • Tag 2
    • 🏁Tagesziele
    • 💡DML - Aufgaben
      • ❓Hilfsmittel
    • 📖Transaktionssteuerung
      • 💡Transaktionen - Aufgaben (optional)
    • 📖DQL - Select-Anweisungen
    • 💡DQL - Aufgaben
    • 📖DQL - Join
  • Tag 3
    • 🏁Tagesziele
    • 📖DQL - Komplexere Abfragen
    • 💡DQL - Aufgaben
    • 📖 Views
    • 💡Views - Aufgaben
  • Tag 4
    • 🏁Tagesziele
    • 📖💡 DCL - Data Control Language
    • 📖💡 Funktionen
    • 📖Datenbanksicherung
    • 💡SQL Projektarbeit
      • ❓Hilfsmittel
  • Tag 5
    • 🏁Tagesziele
    • 📖💡 Datenbank-Programmierung
      • 💡Programmierung - Aufgaben (optional)
    • 📖💡 Befehlszeilenanwendung
Powered by GitBook
On this page
  • Variablen
  • Prozeduren
  • Benutzerdefinierte Funktionen
  • Kontrollstrukturen
  • 💡Aufgaben
  • Trigger
  • 💡Aufgaben

Was this helpful?

Export as PDF
  1. Tag 5

📖💡 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.

DECLARE @lokale_variable Datentyp;
SET @lokale_variable = {Ausdruck oder (Select-Anweisung)};

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:


CREATE PROCEDURE prozedur_name
    [@parameter_name Datentyp]
AS 
BEGIN
    procedure_body 
END;
    

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:

CREATE FUNCTION funktion_name
    ( [@parameter_name (Datentyp)] )
RETURNS Datentyp
AS 
BEGIN
    function_body
    RETURN (Ausdruck) 
END;

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:

CREATE TRIGGER trigger_name
ON {table | view}
{FOR | AFTER | INSTEAD OF} {INSERT [,] UPDATE [,] DELETE} AS
BEGIN
    Anweisungsblock 
END;
  • Trigger werden durch Ereignisse (verbunden auf Tabellen und Sichten) ausgelöst.

  • FOR und AFTER 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ür INSERT: Hier kennt die logische Tabelle "inserted" alle Zeilen, die von INSERT (oder auch UPDATE) 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.

PreviousTageszieleNextProgrammierung - Aufgaben (optional)

Last updated 3 years ago

Was this helpful?

2KB
Aufgaben_Programmierung.sql