| Inhaltsverzeichnis | 6 |
|---|
| Vorwort | 13 |
|---|
| 1. Einführung | 20 |
|---|
| 1. 1. Beispieldatenbank | 20 |
| 1. 1. 1. Entitäten | 20 |
| 1. 1. 2. Szenario | 21 |
| 1. 1. 3. Tabellen und Beziehungen | 25 |
| 1. 2. Einrichtung der Umgebung | 27 |
| 1. 2. 1. Oracle Database 10g Express Edition | 27 |
| 1. 2. 2. Entwicklungsumgebung | 31 |
| 1. 2. 2. 1 Oracle SQL Developer | 31 |
| 1. 2. 2. 2 Oracle SQL Developer Data Modeler | 33 |
| 1. 3. Einrichtung der Beispiel-Datenbank | 34 |
| 1. 3. 1. Dateien | 34 |
| 1. 3. 2. Tabellen und Daten aufspielen | 35 |
| 2. Einführung in PL/SQL | 39 |
|---|
| 2. 1. Wozu überhaupt PL/SQL? | 39 |
| 2. 1. 1. SQL- und PL/SQL-Variante eines Datenzugriffs | 39 |
| 2. 1. 2. Architektur von PL/SQL-Anwendungen | 42 |
| 2. 2. Die Struktur von PL/SQL | 46 |
| 2. 2. 1. Schreibweise und Benennungskonventionen für Variablen | 46 |
| 2. 2. 2. Blockstruktur | 48 |
| 2. 2. 3. Einsatzbereiche von PL/SQL | 50 |
| 2. 2. 4. Guter Programmierstil: Kommentare und Formatierungen | 52 |
| 3. Grundlegende Syntaxvorstellung | 58 |
|---|
| 3. 1. Basis-Syntax | 58 |
| 3. 1. 1. Gültige Zeichenmenge | 58 |
| 3. 1. 2. Literale | 59 |
| 3. 1. 2. 1 Literale: Anführungszeichen | 60 |
| 3. 1. 2. 2 Literale: Boolesche Werte | 61 |
| 3. 1. 2. 3 Literale: Zahlen | 62 |
| 3. 2. Variablen | 63 |
| 3. 2. 1. Deklaration | 64 |
| 3. 2. 2. Verwendung von %TYPE | 65 |
| 3. 2. 3. Vererbung von Datentypen | 66 |
| 3. 2. 4. Gültigkeit und Sichtbarkeit | 66 |
| 3. 3. Datentypen und Operatoren | 70 |
| 3. 3. 1. Oracle- und PL/SQL-Datentypen | 71 |
| 3. 3. 2. Subtypen – Eigene Datentypen | 73 |
| 3. 3. 3. Automatische und explizite Typumwandlung | 75 |
| 3. 3. 4. Operatoren | 79 |
| 3. 4. Ausgabemöglichkeiten im Puffer und in Dateien | 82 |
| 3. 4. 1. Puffer-Ausgaben mit DBMS_OUTPUT | 82 |
| 3. 4. 2. Datei-Ausgaben mit UTL_FILE | 87 |
| 3. 4. 2. 1 Einrichten eines Verzeichnisses | 88 |
| 3. 4. 2. 2 In Dateien schreiben und aus Dateien lesen | 90 |
| 3. 4. 3. Ausnahmen des UTL_FILE-Pakets | 95 |
| 3. 4. 4. Textformatierungen und Ersetzungen | 96 |
| 3. 5. Verzweigungen | 99 |
| 3. 5. 1. IF-Verzweigung | 100 |
| 3. 5. 2. IF-ELSE-Verzweigung | 101 |
| 3. 5. 3. IF-ELSIF-ELSE-Verzweigung | 102 |
| 3. 5. 4. CASE mit einzelnem Selektor | 103 |
| 3. 5. 5. Ausnahmen bei CASE | 104 |
| 3. 5. 6. Selektorlose CASE-Anweisung | 105 |
| 3. 5. 7. Programmmuster bei Verzweigungen | 106 |
| 3. 6. Schleifen | 107 |
| 3. 6. 1. LOOP – Einfache Schleife | 107 |
| 3. 6. 2. Schleifensteuerung mit EXIT und CONTINUE | 108 |
| 3. 6. 3. Verschachtelte Schleifenkonstruktionen mit Labeln | 109 |
| 3. 6. 4. WHILE-Schleife | 111 |
| 3. 6. 5. Numerische FOR-Schleife | 113 |
| 3. 7. Weitere Anweisungen | 115 |
| 3. 7. 1. GOTO-Strukturen mit Labeln | 115 |
| 3. 7. 1. 1 Beispiel | 116 |
| 3. 7. 1. 2 Nutzung mit Schaltvariablen | 119 |
| 3. 7. 2. NULL im Anweisungsabschnitt | 123 |
| 3. 8. Datensätze und %RECORD | 124 |
| 3. 9. Vorteile bei der Verwendung | 125 |
| 3. 9. 1. Definition eines Datensatztyps | 126 |
| 3. 9. 2. Verwendung von Datensätzen | 128 |
| 3. 9. 3. Datensatz-Erzeugung mit %ROWTYPE | 131 |
| 4. Transaktionssteuerung | 134 |
|---|
| 4. 1. SQL in PL/SQL | 134 |
| 4. 1. 1. Zulässigkeit von Anweisungen | 134 |
| 4. 1. 2. Dynamisches SQL | 135 |
| 4. 2. Kontextwechsel | 137 |
| 4. 2. 1. Grundprinzip | 138 |
| 4. 2. 2. Zugriffe über DB-Links | 141 |
| 4. 2. 3. Einsatz von Synonymen | 142 |
| 4. 2. 4. Aufruf von Pseudospalten | 143 |
| 4. 3. Steuerung von Transaktionen | 148 |
| 4. 3. 1. Grundproblem | 148 |
| 4. 3. 2. Bestätigen und zurücksetzen von Anweisungen | 150 |
| 4. 3. 3. Sicherungspunkte | 154 |
| 4. 3. 4. Transaktionen festlegen | 158 |
| 4. 3. 5. Tabellen sperren | 160 |
| 5. Cursor und Mengen | 164 |
|---|
| 5. 1. Prinzip von Cursorn | 164 |
| 5. 1. 1. Erzeugen und verarbeiten | 164 |
| 5. 1. 2. Cursor-Operationen | 166 |
| 5. 2. Explizite Cursor | 167 |
| 5. 2. 1. Deklaration | 167 |
| 5. 2. 2. Verarbeitung | 169 |
| 5. 2. 3. Cursor-Schleifen und Cursor-Attribute | 173 |
| 5. 2. 4. Parametrisierte Cursor und Wertzuweisungen | 178 |
| 5. 3. Implizite Cursor | 180 |
| 5. 3. 1. Definition | 180 |
| 5. 3. 2. Attribute | 182 |
| 5. 3. 3. Beispiel | 183 | <