Stored Procedures
Funktion vs. Prozedur
In Datenbanken können normalerweise zwei unterschiedliche Typen von Prozeduren angelegt werden: Funktionen und - eben - Prozeduren. Wodurch unterscheiden sich diese?
Generell handelt es sich bei Stored Procedures (SP) um "Programme", die etwas machen oder zurückgeben (oder beides) und die in der Datenbank unter einem Namen gespeichert sind und aufgerufen werden können.
Funktionen
Eine Funktion ist eine SP, die genau einen Wert zurückgibt. "Genau ein Wert" heißt konkret: die Ergebnistabelle besteht aus einer Zeile mit einer Spalte.
Typischerweise können Funktionen per SELECT
-Statement aufgerufen und so das Ergebnis abgefragt werden:
SELECT meine_funktion();
-- 4711
In diesem Beispiel gibt die Funktion meine_funktion
einen Zahlenwert zurück.
Prozeduren
Eine Prozedur ist eine SP, die im Gegensatz zur Funktion mehrdimensionale Werte zurückgeben kann (aber nicht muss).
Am Beispiel einer Kundentabelle könnte das Ergebnis einer Prozedur so aussehen:
ID | KuNr | Name | Umsatz |
---|---|---|---|
1 | K1001 | BMW AG | 125.000 |
2 | K1002 | McDonalds | 37.500 |
3 | K1003 | Deutsche Bahn | 42.000 |
Der Aufruf von Prozeduren erfolgt oft über Sprachelemente wie CALL
oder EXEC
:
CALL kundenliste();
Während eine Funktion praktisch immer einen Wert zurückgibt (dafür ist sie da), muss die Prozedur nicht zwingend einen Rückgabewert haben. Es kann Situationen geben, dass die Prozedur in Tabellen nur Daten ändert oder anlegt. Denkbar ist aber auch die Kombination: die Prozedur ändert etwas in Tabellen und gibt ein Ergebnis aus. Dabei muss das zurückgegebene Ergebnis technisch nicht zwingend mit den geänderten Daten zu tun haben (obwohl das in der Praxis der Fall sein dürfte).
Prozeduren und Funktionen können (müssen aber nicht) Parameter entgegennehmen.
Stored Procedure vs. Entwicklung in Programmiersprache
TODO
Stored Procedure vs. Abfrage/View
TODO
Use Case: Auswertung in Form einer Prozedur
Ich verwende Prozeduren gerne für komplexe Auswertungen. Die Voraussetzung für die Nutzung einer Prozedur ist natürlich immer, dass das erwartete Ergebnis Tabellenform hat.
In der Prozedur wird dabei eine sog. lokale temporäre Tabelle angelegt, die die Struktur der erwarteten Ergebnistabelle hat.
Die Prozedur befüllt dann diese temporäre Tabelle nach und nach mit Daten und/oder reichert diese weiter an. Im Vergleich zur einer komplexen Abfrage (s.o.) erlaubt diese Form der Datenbereitstellung später eine bessere Wartung. Es sind nicht alle Schritte in einer Abfrage untergebracht, sondern jeder Schritt ist als separater Prozedurschritt verfügbar. Anpassungen oder Erweiterungen sind meiner Erfahrung nach damit im Nachhinein einfacher und weniger fehleranfällig.
Beispiel folgt
Feedback / Kontakt
Wenn Sie Fragen oder Anregungen zum Artikel Stored Procedures haben, senden Sie mir bitte eine E-Mail an: sql+stored-procedures@technotes.jakoubek.net