Datenmanipulation im Netzwerkmodell Navigieren mit dem find-Befehl User Working Area UWA User Working Area 1. Mittels des find-Befehls wird der gesuchte Record lokalisiert und zum current of run-unit. Datenbank 2. Das get-Kommando kopiert den unter current of run-unit stehenden Record in die passende Record-Schablone der UWA. Record-Schablonen Currency Pointers 3. Zugriff auf Hauptprogramm auf UWA-Schablonen Programmvariable Andreas Heuer, Gunter Saake – Datenbanken I 11-2 Andreas Heuer, Gunter Saake – Datenbanken I Datenbank-Anwendungsprogrammierung 11-4 Zeiger im UWA ➠ Navigierende Ansätze ➠ Anbindung von SQL Current of run-unit: Letzter Record, auf den im Programm zugegriffen wurde. ■ Current of record type: Für jeden Record Type gegriffenen Record mit current of verwiesen. ■ Current of set type: Für jeden Set-Typ wird auf den zuletzt zugegriffenen Record (owner oder member) mit current of verwiesen. wird auf den zuletzt zu- ➠ Weitere Ansätze ■ Andreas Heuer, Gunter Saake – Datenbanken I 11-1 Andreas Heuer, Gunter Saake – Datenbanken I 11-3 Arten der find-Anweisung II ■ Einfügen im NWM Bei insertion is automatic: Durchlauf durch Set Occurrence: find owner of current set find next record in current ■ Einfügen an der Position des aktuellen Currency Pointers des Set-Typs: set set selection is thru current of set Angabe owner is system: sequentieller Durchlauf über alle Elemente. ■ ■ record by database key Das Einfügen wird als store bezeichnet. ◆ Analog über calc-Schlüssel (berechneter Hash-Wert): find ■ ■ 11-8 Datenmanipulation im NWM Direktzugriff über Schlüssel: find calc Andreas Heuer, Gunter Saake – Datenbanken I Arten der find-Anweisung ■ 11-6 Andreas Heuer, Gunter Saake – Datenbanken I wird current of run-unit. current of ■ set selection is thru owner using Finden des Owners eines Records. ■ Der Owner der Set-Ausprägung wird anhand eines berechneten calcSchlüssels bestimmt: In Set-Ausprägung: Suche nach Attributwerten ■ ◆ record by calc-key Die store-Operation gibt es für Record-Typen wie auch für Set-Ausprägungen. Ein store für einen Record-Typ ist ein Transfer der Wertebelegung der entsprechenden Record-Schablone vom Anwendungsprogramm in das Datenbanknetzwerk. Für gegebenen calc-Schlüssel alle Records dazu: find duplicate ■ Das Löschen wird für Record-Typen als delete bezeichnet. Das Herausnehmen aus einer Set-Ausprägung wird als remove bezeichnet. ■ Ändern von Attributen erfolgt mittels modify. record by calc-key Andreas Heuer, Gunter Saake – Datenbanken I 11-5 Andreas Heuer, Gunter Saake – Datenbanken I 11-7 Datenmanipulation im hierarchischen Modell Anbindung von SQL get-Kommando zum Navigieren innerhalb der hierarchisch angeordneten Datensätze: Einbettung von Datenbanksprache in Programmiersprachen: Embedded SQL ■ prozedurale Schnittstelle oder call-Schnittstelle (SQL/CLI, ODBC, JDBC) get unique where get next where get next within parent ■ ◆ ◆ ■ Andreas Heuer, Gunter Saake – Datenbanken I 11-10 Einfügen im NWM II statische Einbettung: Vorübersetzer-Prinzip SQL-Anweisungen zur Übersetzungszeit festgelegt. dynamische Einbettung: Konstruktion von SQL-Anweisungen zur Laufzeit Spracherweiterungen und neue Sprachentwicklungen Andreas Heuer, Gunter Saake – Datenbanken I Abarbeitungsreihenfolge im HM Bei insertion is manual, muß die Einfügeposition durch die Currency Pointer explizit bestimmt werden: A D insert 11-12 into E K L M B F G N O C H P I Q J R S Hierbei ist ein Record-Typ und A ein Set-Typ. B Datensatz-Hierarchie C D E K L M F G N O H P I Q J R S get-next-Reihenfolge Andreas Heuer, Gunter Saake – Datenbanken I 11-9 Andreas Heuer, Gunter Saake – Datenbanken I 11-11 Cursor in SQL Statische Einbettung: Embedded SQL Cursor-Deklaration: cursor for exec sql declare select from for update of cursor for declare select from where Cursor-Deklaration mit Änderungsmöglichkeit: cursor for declare select from for update of Andreas Heuer, Gunter Saake – Datenbanken I 11-14 Andreas Heuer, Gunter Saake – Datenbanken I Das Cursor-Konzept Cursor in SQL2 cursor for scroll SQL Relation ■ prior: Gehe zum vorherigen Tupel. ■ first bzw. last: Gehe zum ersten bzw. letzten Tupel. ■ absolute from: Gehe zum -ten Tupel des Cursors. Negative Werte werden relativ zum letzten Tupel rückwärts gewertet — absolute -1 ist also äquivalent zu last. ■ relative Position. next: Gehe weiter zum nächsten Tupel (wie bisher). from: Gehe zum Andreas Heuer, Gunter Saake – Datenbanken I 11-13 ■ Andreas Heuer, Gunter Saake – Datenbanken I Cursor PASCAL declare insensitive Datenbank Anwendungsprogramm 11-16 -ten Tupel relativ zur aktuellen Cursor- 11-15 Deklaration gemeinsamer Variablen exec sql open exec sql begin declare section char real exec sql end declare section Einsatz der Cursor-Technik exec sql fetch into Benutzung deklarierter Variablen in SQL: exec sql close where exec sql update set exec sql delete from where current of exec sql insert into values Andreas Heuer, Gunter Saake – Datenbanken I 11-18 ! and " Indikator-Variablen zum Test auf null-Werte: exec sql select into table char not null char not null char not null exec sql select into from where Deklaration benutzter Datenbankrelationen exec sql declare 11-20 Datentransfer zwischen Datenbank und Programm Öffnen und Schließen einer Datenbank exec sql connect Andreas Heuer, Gunter Saake – Datenbanken I # # and from where " 11-17 Andreas Heuer, Gunter Saake – Datenbanken I Andreas Heuer, Gunter Saake – Datenbanken I 11-19 Andreas Heuer, Gunter Saake – Datenbanken I end exec sql close end loop 11-23 b O C$3 _`D ^ 8: C ] " 76 8C/3 C \[C6$3 C X B $6CZ , 3 C B: 7 A" $DY + O WX W a ( 3 C B: 7 A" $DV + 1E3 C 8B7A <?" % : .$: 89 876 : . G$N+ $6: ) /6: = C : 3 C Q ( 3 C 8B7A ?2U 1 : . T G 4 1 8D7$6: . $G@!P % /#: . /-,,+ : . SG ) 4 1 " D7$6: . GR!) $6: . G$N+ 8: C 3 C Q 6$: exec sql open exec sql whenever not found goto loop exec sql fetch into O . G$N+ $6: ( 3 C B: 7 A '?P % $#" ! : 8D7/6: . G A/DH/8C" $6: . G$N+ begin cursor for exec sql declare from select k i ( KMJ% : ( KJM% 3 $63 C D L " 8D7$6.G! exec sql begin declare section char char exec sql end declare section g f Fehler- und Ausnahmebehandlung g lk f ed ( KJM% 3 $63 C D ( L 3 ( K<J% " 8D7$6.G!I% A/DH/8C" 8D7/6: . G char i jd 1 table not null not null f ed char g g exec sql declare gh string c ed string type procedure procedure procedure var F E ) 3 C 8B: 7 A $D+2* 1 3 C 8B: 7 A@ ? 3 ) ( > = 1 <; % : $.: 89876 * ) ( 3 2 1 1 %0 /#.-$,,+ 5 4 ) ( $ '%& $#" ! * Ein Beispielprogramm m . sqlerror: Fehler, also m . sqlwarning: Warnung, entspricht etwa m . not found: Kein Tupel wurde gefunden, definiert etwa als 11-21 Andreas Heuer, Gunter Saake – Datenbanken I ‘whenever’-Anweisung SQL Communication Area 11-24 Andreas Heuer, Gunter Saake – Datenbanken I 11-22 Andreas Heuer, Gunter Saake – Datenbanken I from exec sql prepare exec sql execute exec sql rollback work exec sql whenever exec sql include sqlca exec sql begin declare section dcl char varying exec sql end declare section exec sql declare statement exec sql commit work Dynamische Einbettung: Dynamic SQL Transaktionssteuerung “Anfragen als Zeichenketten” Weitere Ansätze Prozedurale SQL-Erweiterungen: PL/SQL II Cursor Persistente (objektorientierte) Programmiersprachen ■ Datenbankprogrammiersprachen ■ 4GL: Sprachen der vierten Generation is ■ cursor select from Gespeicherte Prozeduren ■ Prozedurale SQL-Erweiterungen ■ Zugriff auf Typinformation j e %type %rowtype Andreas Heuer, Gunter Saake – Datenbanken I 11-26 Andreas Heuer, Gunter Saake – Datenbanken I Dynamische Einbettung: Dynamic SQL 11-28 Prozedurale SQL-Erweiterungen: PL/SQL Deklarationen m m m declare jd g g gh i l date g g lk i i ed f is record varchar date from ed f e h h exec sql prepare exec sql execute using type j e i Wertübergabe an Anfragen Andreas Heuer, Gunter Saake – Datenbanken I 11-25 Andreas Heuer, Gunter Saake – Datenbanken I 11-27 Iteration über Tabellen Operationale Konstrukte for ,)*-) in ./,)* loop 000 end loop if then else end if entspricht for !"#$%#&' in (')*$$)* loop + end loop declare 000 ,)*-)1./,)* %rowtype 000 begin loop fetch ./,)* into ,)*-)2 exit when ./,)* %notfound 000 end loop while loop + end loop Fehlerbehandlung when ,#*34 Andreas Heuer, Gunter Saake – Datenbanken I 11-29 Andreas Heuer, Gunter Saake – Datenbanken I E D DT PO U J Q D MN O E M PO DF C D DF Q GH C S R II ! I # ! D U Q R D DF while not loop < from -678"^$D:C$C out select count % O( into +$:H78\;::CD < C$6$A )' false Q C$6$3A D ') +$H78\;:C8D insert into -678"^$D:C$C L - ?Pb D3C$6 select ->=`bR!G:.$67D"41T@ - ="12-67"^$D3C$CY-@? from -678"^/D3C$C > L where > - ="b D3C$6ZA - ?PbR!$G:.$678D and not exists % select O from -678"^$D3C/CY-J where -J=bR!$G:.$678D Z> - =`bR!$G:.$678D" L L - ?Pb D3C/63( and -JPb D3C$6ZA select count % O( into +$H78\; :C8D from -678^$D3C$$C < C$6$3Aa&% +$:H7\8+38Z+$:H78\; ::CD ( end loop +$:H7\8+38 11-31 M 11-32 Andreas Heuer, Gunter Saake – Datenbanken I N D C GH B M N GH J “Stored Procedures” GH DF D V DF GH T GH insert into -67"^$D3C$C select O from G:.$678D"/C8H/DAC8 F D ! L ! E K return create table -678"^$D:C$C %I!G.$678D" char %<JK3( not null 1 L D3C$6 char %MJK3( not null ( E I create function begin M II 11-30 return is +$:H7\;::C8D number +$:H7\8+38 number < C$6$3A boolean MN O create procedure in out in out declare is Andreas Heuer, Gunter Saake – Datenbanken I Beispiel in PL/SQL then $5 $#6334/8,7 ).9 Weitere prozedurale SQL-Erweiterungen INGRES Windows4GL Programm besteht aus hierarchischen Frames Transact-SQL: Sybase, Microsoft SQL Server ■ externe Routinen: implementiert in C, Java, ■ Formular (Maske mit Eingabefeldern und Schaltern) ■ Auslöseregeln ■ Aktionen für Elemente des Formulars m ■ Frame besteht aus: m SQL/PSM (SQL Persistent Stored Modules): SQL-Standard m ■ ◆ ◆ m m m Änderungsoperationen und Anfragen in SQL Prozeduren mit while, if, exit, callframe (Aufruf eines Nachfolger-Frames), Auslöseregeln und Aktionen: siehe aktive Datenbanken (nächstes Kapitel) Andreas Heuer, Gunter Saake – Datenbanken I 11-34 Andreas Heuer, Gunter Saake – Datenbanken I Vorteile von Gespeicherten Prozeduren 4GL: Sprachen der vierten Generation ■ Strukturierungsmittel für größere Anwendungen ■ Prozeduren nur vom DBMS abhängig und nicht von externen Programmiersprachen oder Betriebssystemumgebungen ■ 4GL: Fourth Generation Languages Ausführung der Prozeduren unter Kontrolle des DBMS ■ zentrale Kontrolle der Prozeduren: redundanzfreie Darstellung relevanter Aspekte der Anwendungsfunktionalität in der Integritätssicherung: Aktionsteil von Triggern ■ SQL imperative Konstrukte ■ ■ ; 5GL: PROLOG, ■ 4GL-Sprachen für Anwendungen mit großen Datenmengen Optimierung der Prozeduren Rechtevergabe für Prozeduren ■ 3GL: Ada, Pascal, C, ■ Sprachentwurf leider oft konzeptionslos ■ ■ 11-36 ereignisgesteuerte Programmierung ■ 4GL-Werkzeuge unterstützen interaktive, graphische Programmierung ◆ Menüs und Masken (Formulare) ◆ werden am Bildschirm “zusamengesetzt” ◆ Auslöseregeln und Aktionen hinter Maskenelementen ■ Beispiele ◆ Klassiker: NATURAL, TOTAL Andreas Heuer, Gunter Saake – Datenbanken I ◆ moderne 4GLs für RDBS: INGRES Windows4GL, Gupta SQL-Windows 11-33 Andreas Heuer, Gunter Saake – Datenbanken I 11-35 Persistente Programmiersprachen Persistenzkonzept von Atkinson: Objekte haben eine beliebige Lebensdauer unabhängig von der Blockstruktur des Programms, mit zwei Prinzipien: ■ Typ-Orthogonalität: Programm-Objekte beliebigen Typs können persistent gemacht werden ■ Programm-Unabhängigkeit: verbietet explizite store- oder move-Kommandos zum Speichern von Objekten Neben persistenten Objekten auch transiente Objekte Andreas Heuer, Gunter Saake – Datenbanken I 11-38 Datenbankprogrammiersprachen Realisierungstechniken für Persistenz Problem: Impedance Mismatch (Kluft zwischen Typsystemen PL und DB) ■ ■ Datenbankprogrammiersprache (DBPL): DB-Typsystem in Programmiersprache ■ klassenabhängige Persistenz: persistente Wurzelklasse impliziert Teilgraph aller persistenten Objekte ■ objektabhängige Persistenz: jedes Objekt in jeder Klasse kann persistent oder transient sein Persistente Programmiersprache: DB-Persistenzkonzept für PL-Typsystem Persistenz-Fortpflanzung DBPLs explizite Persistenz: jedes Objekt einzeln ■ PL ■ ■ Operationen: Änderungsoperationen, Anfragen (etwa in TupelkalkülNotation, Iteratoren) Persistenz durch Erreichbarkeit: Objekt persistent, dann automatisch auch (rekursiv) alle Komponentenobjekte persistent Andreas Heuer, Gunter Saake – Datenbanken I persistenter Datentyp ■ etwa J. Schmidt: Pascal/R, Modula/R, DBPL ■ 11-37 ODMG-Binding: Persistenzkonzept für OOPL Andreas Heuer, Gunter Saake – Datenbanken I 11-39