Was ist eine Stored Procedure?
gespeicherte Prozedur
Eine Stored Procedure ist ein benanntes Programm, das in der Datenbank gespeichert und dort ausgeführt wird, Parameter entgegennimmt und mehrere SQL-Anweisungen samt Ablauflogik zu einem einzigen Aufruf zusammenfasst.
Wenn dieselbe Auswertung aus drei Anwendungen heraus gebraucht wird, stellt sich die Frage, ob die Logik dreimal im Code steht oder einmal in der Datenbank.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
- Liegt
- Im Datenbankschema, nicht im Anwendungscode
- Aufruf
- CALL beziehungsweise EXEC mit Parametern
- Typisch bei
- Nachtläufen und Massenverarbeitung
- Verwechselt mit
- Function, Trigger und View
Aufbau und Aufruf
In Oracle schreibst du Prozeduren in PL/SQL. Der Kopf legt Namen und Parameter fest, jeweils mit Richtung: IN für Eingaben, OUT für Rückgaben, IN OUT für beides. Im Rumpf stehen SQL-Anweisungen, Variablen, Schleifen, Bedingungen und die Fehlerbehandlung im EXCEPTION-Block.
Aufgerufen wird sie aus einem Datenbankwerkzeug, aus einem Job oder aus der Anwendung, in Java etwa über ein CallableStatement. Mehrere zusammengehörige Prozeduren fasst Oracle in einem Package zusammen: Der Kopf zeigt nach außen, was aufrufbar ist, der Body enthält die Umsetzung und lässt sich ändern, ohne dass abhängige Objekte ungültig werden.
Wofür sich das im Betrieb lohnt
Der stärkste Grund ist Datennähe. Eine Verarbeitung, die viele Zeilen liest, prüft und in eine andere Tabelle schreibt, muss die Daten nicht über das Netz zur Anwendung und zurück tragen. Was in der Anwendung Minuten dauert, ist in der Datenbank oft eine Sache von Sekunden.
Der zweite Grund sind Rechte. Du kannst einem Konto das Ausführen einer Prozedur erlauben, ohne ihm Zugriff auf die zugrundeliegenden Tabellen zu geben. Damit wird die Prozedur zur einzigen Tür, und diese Tür ist prüfbar. Für Verfahren mit strengen Vorgaben ist das häufig der ausschlaggebende Punkt.
Dazu kommt, dass mehrere Anwendungen dieselbe Regel benutzen können. Wenn eine Bestandsbuchung von drei Programmen und zwei Importen ausgelöst wird, gibt es die Regel in der Datenbank genau einmal statt fünfmal.
Wo es schwierig wird
Logik in der Datenbank landet oft außerhalb der Versionsverwaltung. Wenn eine Prozedur nur im Produktivsystem existiert, weiß niemand, wer sie wann geändert hat. Der Ausweg ist, den Quelltext genauso im Repository zu führen wie den Anwendungscode und über Migrationsskripte einzuspielen.
Testen und Fehlersuche sind mühsamer als in der Anwendung, und es gibt weniger Werkzeuge dafür. Außerdem bindest du dich an das Datenbanksystem: PL/SQL läuft nicht auf einem anderen Hersteller, ein Wechsel bedeutet Neuschreiben.
Die brauchbare Faustregel: Mengenverarbeitung und Regeln, die die Datenintegrität sichern, sind in der Datenbank gut aufgehoben. Fachliche Abläufe, die sich häufig ändern, gehören in die Anwendung, wo sie versioniert, getestet und im Team gelesen werden.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Stored Procedure und was oft damit gleichgesetzt wird
Eine Funktion gibt einen Wert zurück und darf deshalb in SQL-Ausdrücken stehen, etwa in einer SELECT-Liste oder einer WHERE-Bedingung. Eine Prozedur wird als eigene Anweisung aufgerufen und gibt Werte über OUT-Parameter zurück.
Ein Trigger wird nicht aufgerufen, sondern feuert automatisch bei INSERT, UPDATE oder DELETE. Das ist mächtig und unübersichtlich: Wer einen Fehler sucht, sieht im Anwendungscode nicht, dass beim Speichern noch etwas anderes passiert.
Eine View ist eine gespeicherte Abfrage ohne Ablauflogik und ohne Parameter. Wenn du nur eine wiederkehrende Sicht auf Daten brauchst, ist sie die einfachere Wahl.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Nah an den Daten ist schnell, aber schwer im Griff zu behalten
Der Fall, in dem sich das eindeutig lohnt, ist der Mengenjob: Ein Lauf liest große Bestände, verdichtet sie und schreibt das Ergebnis zurück. Steckt die Logik in der Anwendung, wandert jede Zeile über das Netz und wieder zurück. In der Datenbank bleibt sie, wo sie liegt, und der Aufruf schrumpft auf einen Befehl mit Parametern.
Der Preis zeigt sich beim Ausrollen. Prozeduren leben im Schema und nicht im Repository, und sie werden gern direkt auf dem Server geändert, wenn es eilt. Dann steht in der Versionsverwaltung eine Fassung und auf dem Produktivsystem eine andere. Wer Prozeduren einsetzt, braucht deshalb Migrationsskripte, die denselben Weg über Freigabe und Auslieferung nehmen wie der übrige Code.
Dazu kommt die Bindung an das Produkt. T-SQL, PL/SQL und PL/pgSQL sind verschiedene Sprachen, und was in der Prozedurschicht steckt, wandert bei einem Wechsel des Datenbanksystems nicht mit. Für Fachlogik, die sich häufig ändert, ist das ein schlechter Ort, für datennahe Operationen mit klarer Schnittstelle ein guter.
Stored Procedure lernen
Wie Packages, Cursor und Fehlerbehandlung in PL/SQL zusammenspielen, zeigen die Oracle-Trainings für Entwicklung und Betrieb an konkreten Aufgaben.
Wie andere Systeme dasselbe Problem lösen, vergleichst du in den herstellerübergreifenden Datenbankkursen .
Häufige Fragen
Schützen Stored Procedures vor SQL-Injection?
Gehört Geschäftslogik in die Datenbank?
Wie bekomme ich Prozeduren in eine Deployment-Pipeline?
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
Norbert Jansen
Beratung & Inhouse
Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.
Stored Procedure im Kurs statt im Lexikon
Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.