K8 Anwendungsprogrammierschnittstelle Flashcards
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Kopplung von DB- und Programmiersprache
Call-Schnittstelle (prozedurale Schnittstelle, CLI)
- DB-Funktionen werden durch Bibliothek von Prozeduren realisiert
- Anwendung enthält lediglich Prozeduraufrufe
Einbettung von SQL (Embedded SQL, ESQL)
- Spracherweiterung um spezielle DB-Befehle (EXEC SQL …)
- komfortablere Programmierung als mit CLI
statische Einbettung
- Vorübersetzer (Precompiler) wandelt DB-Aufrufe in Prozeduraufrufe um
- Nutzung der normalen PS-Übersetzer für umgebendes Programm
- SQL-Anweisungen müssen zur Übersetzungszeit feststehen
- im SQL-Standard unterstützte Sprachen: C, COBOL, FORTRAN, Ada, PL1, Pascal, MUMPS, Java, …
dynamische Einbettung:
- Konstruktion von SQL-Anweisungen zur Laufzeit
Integrationsansätze unterstützen typischerweise ‚nur‘
- ein Typsystem
- Navigation (satz-/objektorientierterZugriff)
- wünschenswert sind jedoch Mehrsprachenfähigkeit und deskriptive DB-Operationen (mengenorientierter Zugriff)
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Relationale Anwendungsprogrammierschnittstellen (APIs)
- bieten Mehrsprachenfähigkeit und deskriptive DB-Operationen,
- erfordern jedoch Maßnahmen zur Überwindung der sog. Fehlanpassung (impedance mismatch): Satzorientierung vs. Mengenorientierung
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Kernprobleme der API bei konventionellen Programmiersprachen
- Konversion und Übergabe von Werten
- Übergabe aktueller Werte von Wirtssprachenvariablen (Parametrisierung von DB-Operationen)
- Mengenorientierung von DB-Operationen
- Wie und in welcher Reihenfolge werden Zeilen/Sätze dem AP zur Verfügung gestellt?
- Cursor-Konzept
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Eingebettetes statisches SQL:
Anbindung einer SQL-Anweisung an die Wirtssprachen-Umgebung
- eingebettete SQL-Anweisungen werden durch exec sql eingeleitet und durch spezielles Symbol (hier “;”) beendet, um dem Compiler eine Unterscheidung von anderen Anweisungen zu ermöglichen
- Verwendung von AP-Variablen in SQL-Anweisungen verlangt Deklaration innerhalb eines ‚declare section‘-Blocks sowie Angabe des Präfix “:” innerhalb von SQL-Anweisungen
- Kommunikationsbereich SQLCA (Rückgabe von Statusanzeigern u.ä.)
- Übergabe der Werte einer Zeile mit Hilfe der INTO-Klausel
- INTO target-commalist (Variablenliste des Wirtsprogramms)
- Anpassung der Datentypen (Konversion)
- Aufbau/Abbau einer Verbindung zu einem DBS: connect/disconnect
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Zweck, Iterator, Cursor-Deklaration
Zweck
- satz-weise Abarbeitung von Ergebnismengen
- Trennung von Qualifikation und Bereitstellung/Verarbeitung von Zeilen
Cursor ist ein Iterator,
- der einer Anfrage zugeordnet wird und
- mit dessen Hilfe die Zeilen der Ergebnismenge einzeln (one tuple at a time) im Programm bereitgestellt werden
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Cursor-Operation, Reihenfolge der Ergebniszeilen, Wann wird die Ergebnismene ermittelt?
Reihenfolge der Ergebniszeilen
- systembestimmt
- benutzerspezifiziert (ORDER BY)
Wann wird die Ergebnismenge ermittelt?
- schritthaltende Auswertung durch das DBS? Verzicht auf eine explizite Zwischenspeicherung ist nur bei einfachen Anfragen möglich.
- daher Kopie bei OPEN meist erforderlich (ORDER BY, Join, Aggregat-Funktionen, …)
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Veranschaulichung der Cursor-Schnittstelle
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: C-Beispiel
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Aktualisierung mit Bezugnahme auf eine Position
Wenn die Zeilen, die ein Cursor verwaltet (active set), eindeutig den Zeilen einer Tabelle entsprechen, können sie über Bezugnahme durch den Cursor geändert werden.
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: SQL-Programmiermodell
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: SQL-Programmiermodell - Beispiel: Stücklistenauflösung
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Syntax
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - SCROLL: Erweiterte Positionierungsmöglichkeiten
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Sichtbarkeit von Änderungen - INSENSITIVE CURSOR
- T sei die Zeilenmenge, die sich für den Cursor zum OPEN-Zeitpunkt (Materialisierung) qualifiziert
- Spezifikation von INSENSITIVE bewirkt, dass eine separate Kopie von T angelegt wird und der Cursor auf die Kopie zugreift
- Aktualisierungen, die T betreffen, werden in der Kopie nicht sichtbar gemacht; solche Änderungen könnten z. B. direkt oder über andere Cursor erfolgen
- Über einen insensitiven Cursor sind keine Aktualisierungsoperationen möglich (UPDATE nicht erlaubt)
- Die Kombination mit SCROLL ist unproblematisch
GDB K8 Anwendungsprogrammierschnittstelle (keine Berechnugen oder Code in K.)
Cursor-Konzept: Erweiterungen - Sichtbarkeit von Änderungen - ASENSITIVE CURSOR
- Standard
- Bei OPEN muss nicht zwingend eine Kopie von T erstellt werden: die Komplexität der Cursor-Definition verlangt jedoch oft seine Materialisierung als Kopie
- Ob Änderungen, die T betreffen und durch andere Cursor oder direkt erfolgen, in der momentanen Cursor-Instanziierung sichtbar werden, ist implementierungsabhängig
- Falls UPDATE deklariert wird, muss eine eindeutige Abbildung der Cursor-Zeilen auf die Tabelle möglich sein (siehe aktualisierbare Sicht); es wird definitiv keine separate Kopie von T erstellt.