Kopplung (1) Kopplung (3) Kopplung (2) Eingebettetes statisches SQL (1) Kopplung (4) 8. Anwendungsprogrammierschnittstelle



Ähnliche Dokumente
2. Datenbank-Programmierung

Kapitel 2 Anwendungsprogrammierschnittstelle und Anfrageverarbeitung

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Gesicherte Prozeduren

3. Stored Procedures und PL/SQL

Prozedurale Datenbank- Anwendungsprogrammierung

Inhalt. Einbettungstechniken für SQL. 1. Datenbank-Programmierung. Statische Einbettung

Softwareentwicklung mit JAVA EE

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Datenmanagement in Android-Apps. 16. Mai 2013

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

8. Kopplung Programmiersprache - SQL

Datenbankprogrammierung 1

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

Objektorientierte Programmierung

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

6. Sichten, Integrität und Zugriffskontrolle. Vorlesung "Informa=onssysteme" Sommersemester 2015

4. Anwendungsprogrammierschnittstellen

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Kurzeinführung ODBC. 1 Codebeispiele. 1.1 Embedded SQL

Einführung in die Programmierung

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/2013

VBA-Programmierung: Zusammenfassung

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Oracle: Abstrakte Datentypen:

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Übersicht Programmablaufsteuerung

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Einführung in die C-Programmierung

Modellierung und Programmierung 1

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: Übung WS 2014/2015

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Was ist Logische Programmierung?

Übungsblatt 8- Lösungsvorschlag

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

11 Funktionen Vorteile von Funktionen. Leseprobe aus Access und SQL Server

Einführung in die C++ Programmierung für Ingenieure

1. DB-Anwendungsprogrammierung

ecaros2 - Accountmanager

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Informatik 12 Datenbanken SQL-Einführung

Übung 7 DBMS-FUNKTIONALITÄTEN UND DATENIMPORT

Synchronisations- Assistent

Datenbanken für Online Untersuchungen

vs. Fehler zur Übersetzungszeit

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Funktionsübersicht. Beschreibung der zentralen Funktionen von PLOX

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Grundlagen der Künstlichen Intelligenz

SEMINAR Modifikation für die Nutzung des Community Builders

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Programmierung in C. Grundlagen. Stefan Kallerhoff

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

11. Datenbankschnittstellen

1 Vom Problem zum Programm

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Dokumentation IBIS Monitor

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Der SAS DataStep und die Prozedur SQL Cellent Finance Solutions GmbH Seite: 1

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

I.1 Die Parrot Assemblersprache

SQL (Structured Query Language) Schemata Datentypen

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Leseprobe: SQL mit MySQL - Band 4 Kompendium mit Online-Übungs-DB. Kompendium zur schnellen Kurzinformation der Datenbanksprache SQL/MySQL 5.

Kontrollstrukturen und Funktionen in C

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Kundenspezifische Preise im Shop WyRu Online-Shop

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

7. Übung - Datenbanken

Labor 3 - Datenbank mit MySQL

Content Management System (CMS) Manual

P.A. Bernstein, V. Hadzilacos, N. Goodman

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

10 Erweiterung und Portierung

Angewandte Mathematik und Programmierung

Anleitung SEPA-Lastschriften mit VR-NetWorld Software 5

JetSym. Programmierung in Hochsprache ST nach IEC We automate your success.

Arbeiten mit UMLed und Delphi

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Java Webentwicklung (mit JSP)

GEONET Anleitung für Web-Autoren

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

Kapitel 10 Aktive DBMS

PKV- Projektanlage Assistent

Grundlagen der Informatik 2

Transkript:

Kopplung () Übersicht 8. Anwendungsprogrammierschnittstelle Kopplung Inhalt Kopplung von DB- und Programmiersprache Eingebettetes statisches SQL Wirtsspracheneinbettung und Übersetzung SQL/PSM Dynamisches SQL Call-Level-Interface (CLI) statisch SQL-Einbettung dynamisch CALL-Schnittstelle (Call Level Interface CLI) Integrierte Sprachen/Spracherweiterungen persistente Programmiersprachen DB-Programmiersprachen N. Ritter, DIS, SS 200, Kapitel 8 N. Ritter, DIS, SS 200, Kapitel 8 2 Kopplung (2) Übersicht (Forts.) 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, PL, Pascal, MUMPS, Java,... Kopplung (3) Übersicht (Forts.) dynamische Einbettung: Konstruktion von SQL-Anweisungen zur Laufzeit Integrationsansätze unterstützen typischerweise nur ein Typsystem Navigation (satz-/objektorientierter Zugriff) wünschenswert sind jedoch Mehrsprachenfähigkeit und deskriptive DB-Operationen (mengenorientierter Zugriff) Relationale Anwendungsprogrammierschnittstellen (APIs) bieten Mehrsprachenfähigkeit und deskriptive DB-Operationen, erfordern jedoch Maßnahmen zur Überwindung der sog. Fehlanpassung (impedance mismatch): Satzorientierung vs. Mengenorientierung N. Ritter, DIS, SS 200, Kapitel 8 3 N. Ritter, DIS, SS 200, Kapitel 8 4 Kopplung (4) 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 N. Ritter, DIS, SS 200, Kapitel 8 Eingebettetes statisches SQL () C-Beispiel exec sql include sqlca; /* SQL Communication Area */ main () { exec sql begin declare section; char X[3] ; int GSum; exec sql end declare section; exec sql connect to dbname; exec sql insert into Pers (Pnr, Name) values (47, Ernie ); exec sql insert into Pers (Pnr, Name) values (472, Bert ); printf ( Anr? ) ; scanf ( %s, X); exec sql select sum (Gehalt) into :GSum from Pers where Anr = :X; /* Es wird nur ein Ergebnissatz zurückgeliefert! */ printf ( Gehaltssumme: %d\n, GSum) exec sql commit work; exec sql disconnect; N. Ritter, DIS, SS 200, Kapitel 8 6

Eingebettetes statisches SQL (2) 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 N. Ritter, DIS, SS 200, Kapitel 8 7 Cursor-Konzept () 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 Cursor-Deklaration Syntax DECLARE cursor CURSOR FOR table-exp [ORDER BY order-item-commalist] DECLARE C CURSOR FOR SELECT Name, Gehalt, Anr FROM Pers N. Ritter, DIS, SS 200, Kapitel 8 WHERE Anr = K ORDER BY Name; 8 Cursor-Konzept (2) Cursor-Operation (am Beispiel oben) Open C Fetch C INTO Var, Var2, Var3 Close C Reihenfolge der Ergebniszeilen systembestimmt benutzerspezifiziert (ORDER BY) Cursor-Konzept (3) Veranschaulichung der Cursor-Schnittstelle. Anfrage (OPEN C) AWP in satzorientierter Programmiersprache 3. Zeile sequentiell holen (FETCH C) und verarbeiten 4. Cursor schließen (CLOSE C) 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,...) mengenorientiertes DBS 2. Anfrage auswerten, Ergebniszeile im Cursor bereitstellen N. Ritter, DIS, SS 200, Kapitel 8 9 N. Ritter, DIS, SS 200, Kapitel 8 DB 0 Cursor-Konzept (4) C-Beispiel (vereinfacht) exec sql begin declare section; char X[0], Y[3]; exec sql end declare section; exec sql declare C cursor for select Name from Pers where Anr = :Y; printf( Bitte Anr eingeben: \n ); scanf( %d, Y); exec sql open C; while (sqlcode == OK) { exec sql fetch C into :X; printf( Angestellter %d\n, X); exec sql close C; N. Ritter, DIS, SS 200, Kapitel 8 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. Syntax positioned-update ::= UPDATE table SET update-assignment-commalist WHERE CURRENT OF cursor positioned-delete ::= DELETE FROM table WHERE CURRENT OF cursor while (sqlcode == ok) { exec sql fetch C into :X;... /* Berechne das neue Gehalt in Z /* exec sql update Pers set Gehalt = :Z where current of C; N. Ritter, DIS, SS 200, Kapitel 8 2 2

Cursor-Konzept (6) SQL-Programmiermodell. Cursor C Cursor-Konzept (7) 4. Abhängige Cursor C Wert Wert C 3 C2 2. Mehrere Cursor Verknüpfung der Zeilen im Programm C C2 C3 Wert2 C 2 Wert2 Wert3 C3 C3 3. Positionsbezogene Aktualisierung C INTO Variable. Wert2. Update, Delete N. Ritter, DIS, SS 200, Kapitel 8 3 N. Ritter, DIS, SS 200, Kapitel 8 4 Cursor-Konzept (8) : Stücklistenauflösung Tabelle Struktur (Otnr, Utnr, Anzahl) Aufgabe: Ausgabe aller Endprodukte sowie deren Komponenten max. Schachtelungstiefe sei bekannt (hier: 2) Struktur (Otnr, Utnr, Anzahl) Tragfläche T V T N 00 T Q T F Verstrebung 00 Querruder Fahrwerk V N 0 Q N 8 2 0 3 Q S 2 F N 8 Niete Scharnier F S 3 N. Ritter, DIS, SS 200, Kapitel 8 Cursor-Konzept (9) : Stücklistenauflösung (Forts.) exec sql begin declare section; char T0[0], T[0], T2[0]; int Anz; exec sql end declare section; exec sql declare C0 cursor for select distinct Otnr from Struktur S where not exists (select * from Struktur S2 where S2.Utnr = S.Otnr); exec sql declare C cursor for select Utnr, Anzahl from Struktur where Otnr = :T0; exec sql declare C2 cursor for select Utnr, Anzahl from Struktur where Otnr = :T;... N. Ritter, DIS, SS 200, Kapitel 8 6 Cursor-Konzept (0) : Stücklistenauflösung (Forts.)... exec sql open C0; while () { exec sql fetch C0 into :T0; if (sqlcode == notfound) break; printf ( %s\n, T0); exec sql open C; while (2) {exec sql fetch C into :T, :Anz; if (sqlcode == notfound) break; printf ( %s: %d\n, T, Anz); exec sql open (C2); while (3) { exec sql fetch C2 INTO :T2, :Anz; if (sqlcode == notfound) break; printf ( %s: %d\n, T2, Anz); exec sql close (C2); /* end while (2) */ exec sql close C; /* end while () */ exec sql close (C0); N. Ritter, DIS, SS 200, Kapitel 8 7 Cursor-Konzept () : Stücklistenauflösung (Forts.) Ausgabe: T V: Tragfläche N: 0 N: 00 Verstrebung 00 Querruder Fahrwerk Q: N: 8 S: 2 0 2 3 F: Niete Scharnier N: 8 S: 3 N. Ritter, DIS, SS 200, Kapitel 8 8 3

Cursor-Konzept (2) Erweiterungen Syntax cursor-def ::= DECLARE cursor [SENSITIVE INSENSITIVE ASENSITIVE] [SCROLL] CURSOR [WITH HOLD] [WITH RETURN] FOR table-exp [ORDER BY order-item-commalist] [FOR {READ ONLY UPDATE [OF column-commalist]] Cursor-Konzept (3) Erweiterungen (Forts.) SCROLL: Erweiterte Positionierungsmöglichkeiten - Cursor-Definition: EXEC SQL DECLARE C2 SCROLL CURSOR FOR SELECT... Erweitertes FETCH-Statement - Syntax EXEC SQL FETCH [ [<fetch orientation>] FROM ] <cursor> INTO <target list> fetch orientation: NEXT, PRIOR, FIRST, LAST ABSOLUTE <expression>, RELATIVE <expression> N. Ritter, DIS, SS 200, Kapitel 8 9 N. Ritter, DIS, SS 200, Kapitel 8 20 Cursor-Konzept (4) Erweiterungen (Forts.) SCROLL: Erweiterte Positionierungsmöglichkeiten (Forts.) e: EXEC SQL FETCH ABSOLUTE 00 FROM C2 INTO... EXEC SQL FETCH ABSOLUTE -0 FROM C2 INTO... (zehntletzte Zeile) EXEC SQL FETCH RELATIVE 2 FROM C2 INTO... (übernächste Zeile) EXEC SQL FETCH RELATIVE -0 FROM C2 INTO... Cursor-Konzept () Erweiterungen (Forts.) 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 N. Ritter, DIS, SS 200, Kapitel 8 2 N. Ritter, DIS, SS 200, Kapitel 8 22 Cursor-Konzept (6) Erweiterungen (Forts.) Sichtbarkeit von Änderungen (Forts.) 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. N. Ritter, DIS, SS 200, Kapitel 8 23 Wirtsspracheneinbettung und Übersetzung () Prinzipielle Möglichkeiten Aufruftechnik DB-Anweisung wird durch expliziten Funktionsaufruf an das Laufzeitsystem des DBS übergeben, z. B. CALL DBS ( open C ) Es sind prinzipiell keine DBS-spezifischen Vorkehrungen bei der AP-Übersetzung erforderlich! Verschiedene Formen der Standardisierung: Call-Level-Interface (CLI), JDBC Direkte Einbettung keine syntaktische Unterscheidung zwischen Programm- und DB-Anweisungen DB-Anweisung wird als Zeichenkette A ins AP integriert, z. B. exec sql open C typischerweise Einsatz eines Vorübersetzers PC (Precompiler) PC erzeugt für DB-Anweisungen spezielle Call-Aufrufe im AP, so dass das modifizierte AP mit dem Wirtssprachencompiler C übersetzt werden kann N. Ritter, DIS, SS 200, Kapitel 8 24 4

Einbettung/Übersetzung (2) Einbettung/Übersetzung (3) Von der Übersetzung bis zur Ausführung (bei Einsatz eines Vorübersetzers) Embedded-SQL- Programm (z.b. in C) SQL-Precompiler C-Programm (C und DBS- Aufrufe) Datenbank- Katalog Zugriffsmodul Program mbibliothek Programmteil in Maschinencode Linker Ausführbares Programm (Lademodul) Von der Übersetzung bis zur Ausführung (Forts.) Vorübersetzung des AP Entfernung aller Embedded-SQL-Anweisungen aus dem Programm (Kommentare) Ersetzung durch Programmiersprachen-spezifische DBS-Aufrufe Erzeugung eines SQL-freien Programms in der Programmiersprache DBS-seitige Vorbereitung: Analyse und Optimierung der SQL-Anweisungen und Erstellung eines Zugriffsmoduls im DB-Katalog Übersetzung des AP Umwandlung der Anweisungen der höheren Programmiersprache in Maschinencode (Objektmodul) und Abspeicherung in Objektbibliothek SQL-Anweisungen für Compiler nicht mehr sichtbar (C-) Compiler Loader N. Ritter, DIS, SS 200, Kapitel 8 2 N. Ritter, DIS, SS 200, Kapitel 8 26 Einbettung/Übersetzung (4) Von der Übersetzung bis zur Ausführung (Forts.) Binden Zusammenfügen der Objektmodule zu lauffähigem Programm Hinzufügen des SQL-Laufzeitsystems Laden und Ausführen Laden des ausführbaren Programms in den Speicher Anbinden des Zugriffsmoduls aus DB-Katalog und automatische Überprüfung seiner Gültigkeit Programmstart Von zentraler Bedeutung Anfrageauswertung/-optimierung des DBVS ist im wesentlichen für die effiziente Abarbeitung verantwortlich Einbettung/Übersetzung () Auswertungstechnik: Spektrum von Verfahren mit folgenden Eckpunkten Maximale Vorbereitung Für eine DB-Anweisung wird ein zugeschnittenes Programm (Zugriffsmodul) zur Übersetzungszeit (ÜZ) erzeugt Zur Ausführung einer DB-Anweisung (Laufzeit, LZ) wird das Zugriffsmodul geladen und abgewickelt; dabei wird durch Aufrufe des DBVS (genauer: des Zugriffssystems) das Ergebnis abgeleitet Keine Vorbereitung typisch für Call-Schnittstellen (dynamisches SQL) Allgemeines Programm (Interpreter) akzeptiert DB-Anweisungen als Eingabe und erzeugt durch Aufrufe des Zugriffssystems das Ergebnis Wahl des Bindezeitpunktes Wann werden die für die Abwicklung einer DB-Anweisung erforderlichen Operationen vom DB-Schema abhängig? Übersetzungszeit vs. Laufzeit N. Ritter, DIS, SS 200, Kapitel 8 27 N. Ritter, DIS, SS 200, Kapitel 8 28 Einbettung/Übersetzung (6) Wahl des Bindezeitpunktes (Forts.) Einbettung/Übersetzung (7) Maximale Vorbereitung einer DB-Anweisung Übersetzungszeit (ÜZ) Übersetzungskosten: unerheblich für Antwortzeit (AZ) Zugriffe (zur LZ): effizient datenabhängig! AP Invalidierung durch Schemaänderungen Ausgleich gesucht! Laufzeit (LZ) Interpretation: erheblich für AZ Zugriffe (zur LZ): teuer datenunabhängig! aufwendige Optimierung und Erstellung eines Zugriffsmoduls maximale Auswirkungen von Schemaänderungen, welche die DB-Anweisung betreffen Schemaänderungen nach der Übersetzung werden nicht berücksichtigt (neue Zugriffspfade, geänderte Statistiken etc.) Invalidierung des Zugriffsmoduls und erneute Erstellung Interpretation einer DB-Anweisung Interpreter wertet Anweisung (als Zeichenfolge) zur Laufzeit aus aktueller DB-Zustand wird automatisch berücksichtigt sehr hohe Ausführungskosten bei Programmschleifen sowie durch häufige Katalogzugriffe interessant vor allem für Ad-hoc-Anfragen bzw. dynamisches SQL N. Ritter, DIS, SS 200, Kapitel 8 29 N. Ritter, DIS, SS 200, Kapitel 8 30

SQL/PSM () PSM: Persistent Stored Modules zielt auf Leistungsverbesserung vor allem in Client/Server-Umgebung ab Ausführung mehrerer SQL-Anweisungen durch ein EXEC SQL Entwerfen von Routinen mit mehreren SQL-Anweisungen erhöht die Verarbeitungsmächtigkeit des DBS Prozedurale Erweiterungsmöglichkeiten (der DBS-Funktionalität aus Sicht der Anwendung) Einführung neuer Kontrollstrukturen erlaubt reine SQL-Implementierungen von komplexen Funktionen Sicherheitsaspekte Leistungsaspekte ermöglicht SQL-implementierte Klassenbibliotheken (SQL-only) SQL/PSM (2) Erzeugen einer SQL-Prozedur CREATE PROCEDURE proc ( ) { BEGIN INSERT INTO Pers VALUES (...); INSERT INTO Abt VALUES (...); END; Aufruf EXEC SQL CALL proc ( ); N. Ritter, DIS, SS 200, Kapitel 8 3 N. Ritter, DIS, SS 200, Kapitel 8 32 SQL/PSM (3) Vorteile vorübersetzte Ausführungspläne werden gespeichert, sind wiederverwendbar Anzahl der Zugriffe des Anwendungsprogramms auf die DB wird reduziert als gemeinsamer Code für verschiedene Anwendungsprogramme nutzbar es wird ein höherer Isolationsgrad der Anwendung von der DB erreicht N. Ritter, DIS, SS 200, Kapitel 8 33 SQL/PSM (4) Prozedurale Spracherweiterungen Compound statement BEGIN... END; SQL variable declaration DECLARE var CHAR (6); If statement IF subject (var <> urgent ) THEN... ELSE...; Case statement CASE subject (var) WHEN SQL THEN... WHEN...; Loop statement LOOP <SQL statement list> END LOOP; While statement WHILE i<00 DO... END WHILE; Repeat statement REPEAT... UNTIL i<00 END REPEAT; For statement FOR result AS... DO... END FOR; Leave statement LEAVE...; Return statement RETURN urgent ; Call statement CALL procedure_x (,3,); Assignment statement SET x = abc ; N. Ritter, DIS, SS Signal/resignal 200, Kapitel statement 8 SIGNAL divison_by_zero 34 Dynamisches SQL () Festlegen/Übergabe von SQL-Anweisungen zur Laufzeit Benutzer stellt Ad-hoc-Anfrage AP berechnet dynamisch SQL-Anweisung SQL-Anweisung ist aktueller Parameter von Funktionsaufrufen an das DBVS Eigenschaften Vorbereitung einer SQL-Anweisung kann erst zur Laufzeit beginnen Bindung an das DB-Schema erfolgt zum spätest möglichen Zeitpunkt DB-Operationen beziehen sich stets auf den aktuellen DB-Zustand größte Flexibilität und Unabhängigkeit vom DB-Schema Vorbereitung und Ausführung einer SQL-Anweisung erfolgt typischerweise durch Interpretation Leistungsproblem: wiederholte Ausführung derselben Anweisung (DB2 UDB bewahrt Zugriffspläne zur Wiederverwendung im Cache auf) Übersetzung und Code-Generierung ist jedoch prinzipiell möglich! N. Ritter, DIS, SS 200, Kapitel 8 3 Dynamisches SQL (2) Mehrere Sprachansätze (ähnlicher Funktionalität) Eingebettetes dynamisches SQL Call-Level-Interface (CLI) kann ODBC (Open Database Connectivity) implementieren Java Database Connectivity (JDBC) dynamische SQL-Schnittstelle zur Verwendung mit Java de facto -Standard für den Zugriff auf relationale Daten von Java- Programmen aus; Spezifikation der JDBC-Schnittstelle unter http://java.sun.com/products/jdbc JDBC ist gut in Java integriert und ermöglicht einen Zugriff auf relationale Datenbanken in einem objektorientierten Programmierstil JDBC ermöglicht das Schreiben von Java-Applets, die von einem Web- Browser auf eine DB zugreifen können N. Ritter, DIS, SS 200, Kapitel 8 36 6

Dynamisches SQL (3) Gemeinsame Anforderungen (LZ) Zugriff auf Metadaten Übergabe und Abwicklung dynamisch berechneter SQL-Anweisungen Optionale Trennung von Vorbereitung und Ausführung einmalige Vorbereitung mit Platzhalter (?) für Parameter n-malige Ausführung Explizite Bindung von Platzhaltern (?) an Wirtsvariable Variable sind zur ÜZ nicht bekannt! Variablenwert wird zur Ausführungszeit vom Parameter übernommen N. Ritter, DIS, SS 200, Kapitel 8 37 Eingebettetes Dynamisches SQL () Eigenschaften Abkürzung: EDSQL unterstützt mehrere Wirtssprachen ist im Stil statischem SQL ähnlicher; wird oft von Anwendungen gewählt, die dynamische und statische SQL-Anweisungen mischen Programme mit EDSQL sind kompakter und besser lesbar als solche mit CLI oder JDBC 4 wesentliche Anweisungen DESCRIBE PREPARE EXECUTE EXECUTE IMMEDIATE SQL-Anweisungen werden vom Compiler wie Zeichenketten behandelt Deklaration DECLARE STATEMENT Anweisungen enthalten Platzhalter für Parameter (?) statt Programmvariablen N. Ritter, DIS, SS 200, Kapitel 8 38 Eingebettetes Dynamisches SQL (2) Trennung von Vorbereitung und Ausführung : exec sql begin declare section; char Anweisung [26], X[3]; exec sql end declare section; exec sql declare SQLanw statement; /* Zeichenkette kann zugewiesen bzw. eingelesen werden */ Anweisung = DELETE FROM Pers WHERE Anr =? ; /* Prepare-and-Execute optimiert die mehrfache Verwendung einer dynamisch erzeugten SQL-Anweisung */ exec sql prepare SQLanw from :Anweisung; exec sql execute SQLanw using K ; scanf ( %s, X); exec sql execute SQLanw using :X; N. Ritter, DIS, SS 200, Kapitel 8 39 Eingebettetes Dynamisches SQL (3) Einmalige Ausführung einer SQL-Anweisung scanf ( %s, Anweisung); exec sql execute immediate :Anweisung; Cursor-Verwendung SELECT-Anweisung nicht Teil von DECLARE CURSOR, sondern von PREPARE- Anweisung OPEN-Anweisung (und FETCH) anstatt EXECUTE exec sql declare SQLanw statement; exec sql prepare SQLanw from SELECT Name FROM Pers WHERE Anr=? ; exec sql declare C cursor for SQLanw; exec sql open C using K ; N. Ritter, DIS, SS 200, Kapitel 8 40 Eingebettetes Dynamisches SQL (4) Dynamische Parameterbindung Anweisung = INSERT INTO Pers VALUES (?,?,...) ; exec sql prepare SQLanw from :Anweisung; vname = Ted ; nname = Codd ;... exec sql execute SQLanw using :vname, :nname,...; Zugriff auf Beschreibungsinformation wichtig wenn Anzahl und Typ der dynamischen Parameter nicht bekannt ist Deskriptorbereich ist eine gekapselte Datenstruktur, die durch das DBVS verwaltet wird Eingebettetes Dynamisches SQL () Zugriff auf Beschreibungsinformation wichtig (Forts.) Anweisung = INSERT INTO Pers VALUES (?,?,...) ; exec sql prepare SQLanw from :Anweisung; exec sql allocate descriptor Eingabeparameter ; exec sql describe input SQLanw into sql descriptor Eingabeparameter ; exec sql get descriptor Eingabeparameter :n = count; for (i = ; i < n; i ++) { exec sql get descriptor Eingabeparameter value :i :attrtyp = type, :attrlänge = length, :attrname = name; exec sql set descriptor Eingabeparameter value :i data = :d, indicator = :ind; exec sql execute SQLanw using sql descriptor Eingabeparameter ; N. Ritter, DIS, SS 200, Kapitel 8 4 N. Ritter, DIS, SS 200, Kapitel 8 42 7

Call-Level-Interface () Spezielle Form von dynamischem SQL Schnittstelle ist als Sammlung von Prozeduren/Funktionen realisiert Direkte Aufrufe der Routinen einer standardisierten Bibliothek Keine Vorübersetzung (Behandlung der DB-Anweisungen) von Anwendungen Vorbereitung der DB-Anweisung geschieht erst beim Aufruf zur LZ Anwendungen brauchen nicht im Source-Code bereitgestellt werden Wichtig zur Realisierung von kommerzieller AW-Software bzw. Tools wird sehr häufig in der Praxis eingesetzt! CLI-Standardisierung in SQL3 wurde vorgezogen ISO-Standard wurde 996 verabschiedet starke Anlehnung an ODBC bzw. X/Open CLI Standard-CLI umfasst über 40 Routinen: Verbindungskontrolle, Ressourcen- Allokation, Ausführung von SQL-Befehlen, Zugriff auf Diagnoseinformation, Transaktionsklammerung, Informationsanforderung zur Implementierung N. Ritter, DIS, SS 200, Kapitel 8 43 Call-Level-Interface (2) Vorteile von CLI Schreiben portabler Anwendungen Systemunabhängigkeit Mehrfache Verbindungen zur selben DB Verbindungen zu mehreren DBS Optimierung des Zugriffs (durch Prepare) Kooperation von AP und DBS maximale gegenseitige Kapselung Zusammenspiel AP/CLI und DBVS ist nicht durch Übersetzungsphase vorbereitet Wahl des DBS zur Laufzeit vielfältige LZ-Abstimmungen erforderlich N. Ritter, DIS, SS 200, Kapitel 8 44 Call-Level-Interface (3) CLI- Beispiel: #include sqlcli.h #include <string.h> { if (SQLExecDirect (hstmt, create,...)!= SQL_SUCCESS) return (print_err (hdbc, hstmt) ) ; Wesentlich: Konzept der Handle-Variablen SQLCHAR * server; SQLCHAR * uid; /* commit transaction */ SQLTransact (henv, hdbc, SQL_COMMIT); Handle (internes Kennzeichen) ist letztlich eine Programmvariable, die Informationen repräsentiert, die für ein AP durch die CLI-Implementierung verwaltet wird SQLCHAR * pwd; HENV henv; // environment handle HDBC hdbc; // connection handle /* insert row */ { SQLCHAR insert [ ] = INSERT INTO gestattet Austausch von Verarbeitungsinformationen HSTMT hstmt; // statement handle NameID VALUES (?,?) ; Arten Umgebungskennung repräsentiert den globalen Zustand der Applikation Verbindungskennung separate Kennung: n Verbindungen zu einem oder mehreren DBS Freigabe/Rücksetzen von Transaktionen, Isolationsgrad Anweisungskennung mehrfache Definition, auch mehrfache Nutzung SQLINTEGER id; SQLCHAR name []; /* connect to database */ SQLAllocEnv (&henv); SQLAllocConnect (henv, &hdbc) ; if (SQLConnect (hdbc, server, uid, pwd,...)!= SQL_SUCCESS) return (print_err (hdbc,...) ) ; if (SQLPrepare (hstmt, insert,...)!= SQL_SUCCESS) return (print_err (hdbc, hstmt) ) ; SQLBindParam (hstmt,,..., id,...) ; SQLBindParam (hstmt, 2,..., name,...) ; id = 00; strcpy (name, Schmidt ) ; Ausführungszustand einer SQL-Anweisung; sie fasst Informationen zusammen, die bei statischem SQL in SQLCA, SQLDA und Cursorn stehen /* create a table */ SQLAllocStmt (hdbc, &hstmt) ; if (SQLExecute (hstmt)!= SQL_SUCCESS) return (print_err (hdbc, hstmt) ) ; Deskriptorkennung enthält Informationen, wie Daten einer SQL-Anweisung zwischen DBS und CLI-Programm ausgetauscht werden { SQLCHAR create [ ] = CREATE TABLE NameID (ID integer, Name varchar (0) ) ; /* commit transaction */ SQLTransact (henv, hdbc, SQL_COMMIT) ; N. Ritter, DIS, SS 200, Kapitel 8 4 N. Ritter, DIS, SS 200, Kapitel 8 46 Zusammenfassung () Cursor-Konzept zur satz-weisen Verarbeitung von Datenmengen Anpassung von mengenorientierter Bereitstellung und satz-weiser Verarbeitung von DBS-Ergebnissen Operationen: DECLARE CURSOR, OPEN, FETCH, CLOSE Erweiterungen: Scroll-Cursor, Sichtbarkeit von Änderungen Statisches (eingebettetes) SQL hohe Effizienz, gesamte Typprüfung und Konvertierung erfolgen durch Precompiler relativ einfache Programmierung Aufbau aller SQL-Befehle muss zur Übersetzungszeit festliegen es können zur Laufzeit nicht verschiedene Datenbanken dynamisch angesprochen werden N. Ritter, DIS, SS 200, Kapitel 8 47 Zusammenfassung (2) Interpretation einer DB-Anweisung allgemeines Programm (Interpreter) akzeptiert Anweisungen der DB-Sprache als Eingabe und erzeugt mit Hilfe von Aufrufen des Zugriffssystems Ergebnis hoher Aufwand zur Laufzeit (v.a. bei wiederholter Ausführung einer Anweisung) Übersetzung, Code-Erzeugung und Ausführung einer DB-Anweisung für jede DB-Anweisung wird ein zugeschnittenes Programm erzeugt (Übersetzungszeit), das zur Laufzeit abgewickelt wird und dabei mit Hilfe von Aufrufen des Zugriffssystems das Ergebnis ableitet Übersetzungsaufwand wird zur Laufzeit soweit wie möglich vermieden PSM zielt ab auf Leistungsverbesserung, vor allem in Client/Server-Umgebung erhöht die Verarbeitungsmächtigkeit des DBS N. Ritter, DIS, SS 200, Kapitel 8 48 8

Zusammenfassung (3) Dynamisches SQL CLI Festlegung/Übergabe von SQL-Anweisungen zur Laufzeit hohe Flexibilität, schwierige(re) Programmierung Unterschiede zu statischem, eingebettetem SQL explizite Anweisungen zur Datenabbildung zwischen DBS und Programmvariablen klare Trennung zwischen Anwendungsprogramm und SQL ( einfacheres Debugging) Schnittstelle ist als Sammlung von Prozeduren/Funktionen realisiert Keine Vorübersetzung oder Vorbereitung Anwendungen brauchen nicht im Source-Code bereitgestellt werden Zusammenfassung (4) JDBC (ergänzende Information) bietet Schnittstelle für den Zugriff auf (objekt-) relationale DBS aus Java- Anwendungen vermeidet einige syntaktischen Mängel (Lesbarkeit, Fehleranfälligkeit) von CLI SQLJ (ergänzende Information) eingebettete Sprache für statische Java-Programme zielt auf verbesserte Laufzeiteffizienz im Vergleich zu JDBC ab, Syntax- und Semantikprüfung zur Übersetzungszeit größere Unabhängigkeit von verschiedenen SQL-Dialekten Wichtig zur Realisierung von kommerzieller AW-Software bzw. Tools N. Ritter, DIS, SS 200, Kapitel 8 49 N. Ritter, DIS, SS 200, Kapitel 8 0 9