next up previous contents
Next: Embedded SQL Up: SQL Previous: Datenmanipulationsbefehle von SQL

PL/SQL

PL/SQL [PLSQL] ist eine prozedurale Erweiterung der deklarativen Abfragesprache SQL, es gibt zum Beispiel Schleifen und bedingte Verzweigungen, man hat aber keine Berechnungsvollständigkeit und keine Modularisierung.

PL/SQL erlaubt die Ausführung komplexer datenbankorientierter Operationen innerhalb des Datenbank-Servers, wobei die Kontrolle nicht nach jeder SQL-Anweisung an das Anwendungsprogramm zurückgegeben werden muß. Außerdem hat man eine einheitliche Sprache für alle Anwendungsprogramme und für die Administration des Datenbanksystems.

PL/SQL ist eine blockorientierte Sprache, wobei jeder Block aus einem optionalen Deklarationsteil (Variablen- und Konstantendeklarationen, explizite Cursor-Definitionen und benutzerdefinierte Ausnahmen), einem Ausführungsteil (dem eigentlichen Programm) und einem optionalen Fehler- und Ausnahmebehandlungsteil besteht.

Ein Cursor ist ein Verweis auf den privaten Arbeitsbereich einer SQL-Anweisung (private SQL area). Das Cursorkonzept ist eine Erweiterung von SQL, die in PL/SQL eingeführt wurde, um die zeilenweise Abarbeitung des Abfrageergebnisses zu ermöglichen. Ein Cursor kann implizit deklariert sein für DDL- und DML-Anweisungen einschließlich SELECT, die nur eine einzige Zeile liefern, oder explizit für mengenorientierte Abfragen, die mehr als eine Zeile liefern. Mit Aufrufen der Fetch-Operation wird der Cursor Datensatz für Datensatz über die Ergebnismenge bewegt. Man kann immer nur auf die Werte der Attribute des aktuellen Datensatzes zugreifen und hat folgende Möglichkeiten, den Status eines Cursors zu überprüfen: %FOUND ist TRUE, wenn die letzte FETCH-Operation einen Datensatz gefunden hat (analog dazu ist %NOTFOUND TRUE, wenn die letzte FETCH-Operation keinen Datensatz gefunden hat), %ROWCOUNT liefert die Anzahl der bereits gefundenen Datensätze und %ISOPEN ist TRUE, wenn der Cursor geöffnet ist.

Wie schon vorher erwähnt, gibt es in PL/SQL Kontrollstrukturen:

 nnnnnn¯ 
 Unbedingte Schleife

LOOP

...

[EXIT [WHEN condition]; ]

...

END LOOP;

FOR-Schleife

FOR counter IN [reverse] start .. end LOOP

...

END LOOP;

FOR-Cursor-Schleife

DECLARE

CURSOR curFor IS SELECT * FROM Friends ORDER BY lastName;

...

BEGIN

FOR c1Rec IN curFor LOOP

...

count := curFor%ROWCOUNT;

...

END LOOP;

Bei einer FOR-Cursor-Schleife wird implizit eine Datensatzstruktur gemäß der Cursor-Deklaration erstellt, der Cursor geöffnet, die Datensätze (einer nach dem anderen) aus der Datenbank in die Struktur übertragen und der Cursor nach Beenden der Schleife wieder geschlossen.

Ein kurzes Beispiel soll einen Eindruck geben, wie PL/SQL-Programme aussehen können.

 nnnnnn¯ 
DECLARE

CURSOR c1 IS SELECT * FROM Friends ORDER BY lastName;

c1Rec c1%ROWTYPE;

BEGIN

...

OPEN c1;

...

LOOP

FETCH c1 INTO c1Rec;

EXIT WHEN c1%NOTFOUND;

END LOOP;

...

count := c1%ROWCOUNT;

CLOSE c1;

...

END



next up previous contents
Next: Embedded SQL Up: SQL Previous: Datenmanipulationsbefehle von SQL



Christoph Steindl
Thu Jul 24 14:37:19 MET DST 1997