## Name einer Datenbankprozedur (dbproc_name)

Der Name einer Datenbankprozedur (dbproc_name) bezeichnet eine Datenbankprozedur.

### Syntax

<dbproc_name> ::= [<schema_name>.]<identifier>

Die Angabe von TEMP als Schema in einer Datenbankprozedur ist nicht zulässig.

Der Schemaname und der Bezeichner dürfen jeweils nicht länger als 32 Zeichen lang sein.

### Erläuterung

In einer gut strukturierten Datenbankanwendung sind die SQL-Anweisungen typischerweise nicht über die gesamte Anwendung verteilt, sondern werden in einer Zugriffsschicht konzentriert. Diese Zugriffsschicht hat zur restlichen Anwendung eine prozedurale Schnittstelle, an der die Operationen auf Anwendungsobjekten in Form abstrakter Datentypen bereitgestellt werden.

In Client-Server-Konfigurationen erfolgt bei der Ausführung einer jeden SQL-Anweisung in der Zugriffsschicht eine Interaktion zwischen dem Client und dem Server. Die Anzahl dieser Interaktionen kann drastisch reduziert werden, wenn die SQL-Zugriffsschicht nicht mehr im Client, sondern im Server abläuft.

Dazu stellt das Datenbanksystem eine Sprache (spezielle SQL-Syntax, die um Variablen, Kontrollstrukturen und Möglichkeiten zur Fehlerbehandlung erweitert wurde) bereit, in der die Formulierung einer SQL-Zugriffsschicht auf der Server-Seite ermöglicht wird. Diese spezielle SQL-Syntax kann verwendet werden, um Datenbankprozeduren zu definieren.

Das hat drei wesentliche Vorteile:

· Die Anzahl der Interaktionen zwischen Client und Server wird um Faktoren reduziert. Nur noch pro Operation auf einem Anwendungsobjekt ist eine Client-Server-Kommunikation erforderlich, nicht mehr pro SQL-Anweisung. Das erhöht die Performance von Client-Server-Konfigurationen erheblich.

· Die SQL-Zugriffsschicht enthält prozedural formulierte Integritätsregeln und "business rules". Die Konzentration dieser Regeln auf der Server-Seite und ihre Elimination aus den Datenbankanwendungen führt dazu, dass jetzt an zentraler Stelle Änderungen dieser Regeln erfolgen können, die sofort in allen Datenbankanwendungen wirksam werden. Damit werden auch diese Integritäts- und Entscheidungsregeln Bestandteil des Katalogs im Datenbanksystem.

· Eine auf die Server-Seite verlagerte SQL-Zugriffsschicht in der Form von Datenbankprozeduren erlaubt es auch, kundenspezifische Datenbankfunktionalität bereitzustellen und ist daher ein wesentliches Customizing-Werkzeug.

Um eine Datenbankprozedur ausführen zu können, muss ein Benutzer das Aufrufprivileg dafür besitzen. Dieses Aufrufprivileg ist unabhängig davon, welche Privilegien der Benutzer auf den Tabellen und Spalten besitzt, die in der Datenbankprozedur benutzt werden. Es ist deshalb möglich, dass ein Benutzer über eine Datenbankprozedur SQL-Anweisungen ausführen kann, die für ihn außerhalb dieser Datenbankprozedur nicht zulässig sind.

Datenbankprozeduren werden aus der Anwendungsprogrammiersprache heraus explizit aufgerufen. Sie können Parameter enthalten, wobei nur LONG-Spalten ausgeschlossen sind. In wieweit LONG-Spalten innerhalb von Datenbankprozeduren verwendet werden können, hängt von deren Länge und dem zur Verfügung stehenden Speicherplatz ab.

Wie bei jeder SQL-Anweisung muss auch bei einem Aufruf einer Datenbankprozedur sichergestellt sein, dass dieser Aufruf im Erfolgsfall die gewünschten Wirkungen hat, im Fehlerfall aber keinerlei Effekte im Datenbanksystem hinterlässt. Damit dieses Verhalten auch für Datenbankprozeduren erreicht wird, stellt MaxDB geschachtelte Transaktionen bereit. Jeder Aufruf einer Datenbankprozedur kann innerhalb einer Subtransaktion ablaufen, die zurückgesetzt werden kann, ohne die Transaktionssteuerung der Datenbankanwendung zu beeinträchtigen.

#### SQL-Anweisungen, um eine Datenbankprozedur anzulegen, aufzurufen und zu löschen

CREATE DBPROC[EDURE]-Anweisung

CALL-Anweisung

DROP DBPROC[EDURE]-Anweisung

Siehe auch:

Triggername (trigger_name)

Name einer Datenbankfunktion (dbfunction_name)

Datenintegrität absichern