Datenbank-Anwendungsprogrammierung Datenmanipulation im

Werbung
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
Herunterladen