prev up next

SQL-Scripte

Microsoft SQL-Server 2000 bietet eine prozedurale Erweiterung von SQL an, genannt SQL-Scripte oder auch Stored Procedures. Hiermit können SQL-Statements zu namenlosen Blöcken, Prozeduren oder Funktionen zusammengefasst und ihr Ablauf durch Kontrollstrukturen gesteuert werden.

Sei eine Tabelle konto mit Kontonummern und Kontoständen angelegt durch

create table konto (nr int, stand money)
Listing 7.1 zeigt eine while-Schleife, die 50 Konten mit durchlaufender Numerierung einrichtet und alle Kontostände bis auf das Konto 42 mit 0.0 initialisiert.

Listing 7.1: namenloses SQL-Script

Listing 7.2 zeigt eine benannte Stored Procedure, welche versucht, innerhalb der Tabelle konto eine Überweisung durchzuführen und danach das Ergebnis in zwei Tabellen festhält:

create table gebucht   (datum DATE, nr_1 int, nr_2 int, betrag money)
create table abgelehnt (datum DATE, nr_1 int, nr_2 int, betrag money)

Listing 7.2: stored procedure ueberweisung

Im Gegensatz zu einem konventionellen Benutzerprogramm wird eine stored procedure in der Datenbank gespeichert. Sie wird aufgerufen und (später) wieder entfernt durch

execute ueberweisung 42,37,50
drop procedure ueberweisung

In Listing 7.3 wird eine Funktion f2c definiert, die eine übergebene Zahl als Temperatur in Fahrenheit auffaßt und den Wert nach Celsius umrechnet.

Listing 7.3: stored function f2c

Der Aufruf der Funktion erfolgt innerhalb einer SQL-Abfrage unter Angabe des Besitzers (hier: dbo):

select temperatur, dbo.f2c(temperatur) from daten

Oft besteht das Ergebnis eines Select-Statements aus einer variablen Anzahl von Tupeln. Diese können nacheinander verarbeitet werden mit Hilfe eines sogenannten Cursor. Listing 7.4 zeigt den typischen Einsatz.

Zunächst wird der Cursor durch declare mit einer SQL-Query assoziiert, welche die Professorennamen mit ihren Vorlesungstiteln ermittelt. Dann wird er mit open für die Abarbeitung geöffnet. Mittels fetch wird das nächste Tupel aus der Trefferliste geholt und mit into in lokalen Variablen abgespeichert. Falls das geklappt hat (fetch_status = 0) kann durch print der Inhalt der Variablen ausgegeben werden. Zum Abschluss wird der Cursor geschlossen und deallokiert.

Listing 7.4: Umgang mit einem Cursor


prev up next