10.1 Datendefinitionsanweisungen und Views
10.3.1 INSERT-Anweisung und View
10.3.2 UPDATE-Anweisung und View
10.3.3 DELETE-Anweisung und View
Dieses Kapitel ist ausschließlich den Views gewidmet.
Die
Struktur des Kapitels
ähnelt der Beschreibung der
Basistabellen aus den
Kapiteln 7 bis 9.
Zunächst werden
die Anweisungen zur Datendefinition beschrieben. Im zweiten
Teil
werden die Anweisungen
SELECT, UPDATE, DELETE
und
INSERT erörtert, wobei die SELECT-Anweisung getrennt von den
übrigen drei behandelt
wird. Im Unterschied zu Basistabellen
gelten bei Datenmanipulationsanweisungen für Views einige
Einschränkungen, die
am Ende des
jeweiligen Abschnitts
erklärt werden.
In
den bisherigen Kapiteln
sind ausschließlich die
Basistabellen erörtert worden.
Eigenschaft aller
Basistabellen ist,
daß sie physikalisch existieren. Eine
Basistabelle enthält
also Objekte, die
alle auf der
Platte gespeichert sind. Im Unterschied
zu Basistabellen
belegen Views keinen Speicherplatz. Views werden immer aus
existierenden Basistabellen abgeleitet, und das System trägt
die
Eigenschaften jedes Views
in die
Systemtabellen ein.
Lediglich die Einträge in den verschiedenen Systemtabellen
existieren physikalisch von einem
View. Deswegen heißen Views
auch virtuelle Tabellen.
In der Systemtabelle iiviews
befinden sich die wichtigsten
Einträge für Views. iiviews beinhaltet je eine Reihe für
jedes im System erstellte View.
Diese Systemtabelle enthält
mehrere Spalten, von welchen die erste, table_name den Namen
des Views enthält. Die zweite
Spalte, table_owner, enthält
den Eigentümernamen des Views.
Wichtig ist auch die Spalte
text_segment, die
die SELECT-Anweisung beinhaltet, die aus
der CREATE VIEW-Anweisung übernommen
wird.
Jedes View wird mit der
Anweisung CREATE VIEW erstellt. Die
allgemeine Form dieser Anweisung ist:
CREATE VIEW view_name [(spalten_liste)]
AS select_anw
[WITH CHECK OPTION];
view_name ist der Name des neuerstellten Views. select_anw
kennzeichnet die SELECT-Anweisung, mit der
die Auswahl der
Reihen und Spalten aus der Basistabelle durchgeführt wird.
spalten_liste ist eine Liste
der Namen der Viewspalten. Falls
diese optionale Angabe ausgelassen
wird, werden die Namen der
Spalten aus der Projektion der
SELECT-Anweisung übernommen.
Die Angabe "WITH CHECK OPTION" wird später in diesem Kapitel
beschrieben.
Die Erstellung eines Views
kann aus verschiedenen Gründen
erfolgen. In umfangreicheren Datenbankanwendungen enthalten
einige Basistabellen eine sehr
große Anzahl von
Reihen
bzw.
Spalten. Für den Benutzer, der
z.B. nur mit
einem
kleinen Ausschnitt einer Basistabelle arbeitet, ist es nicht
notwendig, alle Spalten der
Basistabelle zu kennen. In diesem
Fall ist es sinnvoll, ein
View zu erstellen, das nur
die
Teile der Basistabelle enthält,
die für den Benutzer von
Bedeutung sind.
Genauso kann es sinnvoll sein,
ein View zu erstellen, falls
man
gewissen Benutzern den
Zugriff auf eine oder
mehrere
Spalten einer Basistabelle untersagen will. Dabei
kann es
sich um die Spalte mit den Gehältern der Mitarbeiter oder
um die Spalten mit den sicherheitsrelevanten Daten der Firma
handeln. (Dieser Aspekt des
Views wird hier nicht
weiter
verfolgt; er wird ausführlich in
Kapitel 14 erörtert.).
Beispiel 10.1
Erstellen Sie ein View, das alle
Daten der Sachbearbeiter der
Firma beinhaltet.
CREATE
VIEW v_sach_arb
AS SELECT m_nr, pr_nr, einst_dat
FROM
arbeiten
WHERE aufgabe = 'Sachbearbeiter';
In Beispiel 10.1 werden mit der
SELECT-Anweisung die Reihen
der
Basistabelle arbeiten
ausgewählt, die die Bedingung in
der
WHERE-Klausel erfüllen. Alle
ausgewählten Reihen bilden
das neuerstellte View v_sach_arb.
m_nr |
pr_nr |
aufgabe |
einst_dat |
9031 |
p3
|
Sachbearbeiter |
15-nov-1988 |
28559 |
p2
|
Sachbearbeiter |
01-feb-1989 |
28559 |
p1 |
|
01-aug-1988 |
9031 |
p1
|
Gruppenleiter |
15-apr-1989 |
2581 |
p3
|
Projektleiter |
15-oct-1989 |
29346 |
p2 |
|
15-dec-1987 |
18316 |
p2 |
|
01-jun-1989 |
25348 |
p2
|
Sachbearbeiter |
15-feb-1989 |
10102 |
p3
|
Gruppenleiter |
01-jan-1989 |
10102 |
p1
|
Projektleiter |
01-oct-1988 |
29346 |
p1
|
Sachbearbeiter |
01-apr-1989 |
Abb.10-1 Die
Basistabelle arbeiten
Abbildung 10-1 zeigt die Basistabelle arbeiten, wobei
das
View v_sach_arb grau unterlegt
dargestellt ist.
Jeder Anwender, der ein View benutzt, arbeitet mit ihm genau
wie mit jeder anderen Basistabelle. Gewisse Einschränkungen,
die
für Views gelten,
werden im Laufe
dieses Kapitels
nacheinander erörtert.
Die
Abfragen, die ein View betreffen,
werden tatsächlich
auf
der zugrundeliegenden
Basistabelle durchgeführt. (Wir
erinnern noch
einmal daran, daß ein View physikalisch
nicht
existiert; es existieren nur Einträge in Systemtabellen,
die
es definieren.). Folgende Abfrage auf
das View v_sach_arb
SELECT m_nr
FROM v_sach_arb
WHERE
pr_nr = 'p2';
wird vom System auf Grund
der Definition des
Views in
die Abfrage auf die zugrundeliegende
Basistabelle arbeiten
umgewandelt:
SELECT m_nr
FROM arbeiten
WHERE pr_nr = 'p2'
AND aufgabe = 'Sachbearbeiter';
Jedes Ändern einer Basistabelle, aus der ein View abgeleitet
ist, betrifft automatisch auch das View. Genauso werden
alle
Änderungen eines Views automatisch
auf die zugrundeliegende
Basistabelle übertragen und durchgeführt. (Für das Ändern
eines Views gelten gewisse
Einschränkungen, die in
einem
späteren Abschnitt dieses Kapitels
beschrieben sind.).
In
Beispiel 10.1 wurde ein View erstellt, in dem einige
Reihen aus der Basistabelle arbeiten
ausgewählt wurden.
Genauso ist es möglich, einige
Spalten bzw. einige Reihen
und
Spalten einer Basistabelle
auszuwählen und ein View zu
erstellen.
Beispiel 10.2
Leiten Sie aus der Basistabelle projekt ein View ab, bei dem
die Spalte mittel nicht
sichtbar ist.
CREATE VIEW v_teil_pr
AS SELECT pr_nr, pr_name
FROM projekt;
Das View
v_teil_pr beinhaltet alle
Reihen der Basistabelle
projekt, abgesehen von der
Spalte mittel.
Wie
aus der allgemeinen
Form der CREATE
VIEW-Anweisung
ersichtlich, ist die
Angabe der Spaltennamen eines
Views
optional. Falls die Spaltennamen
des Views identisch mit
den
Spaltennamen der Basistabelle
sein sollen, können sie
weggelassen werden. Diese Eigenschaft
ist in Beispiel 10.1
benutzt worden. In der Praxis ist
dies auch meist der Fall.
Andererseits ist es
auch möglich, andere
Namen für die
Spaltennamen des Views zu vergeben.
In zwei Fällen ist es sogar
notwendig, die Spaltennamen eines
Views explizit anzugeben, und zwar:
a) wenn eine Spalte in einem
View aus einem Ausdruck
oder einer Aggregatfunktion abgeleitet ist;
b) wenn Spaltennamen in einem View nicht
eindeutig
sind.
Beispiel 10.3
Erstellen Sie ein View, das folgende Spalten beinhaltet: Die
Projektnummer und die Anzahl der
dem Projekt zugehörenden
Mitarbeiter.
CREATE VIEW v_arb_anzahl (pr_nr, anzahl)
AS SELECT pr_nr, COUNT(*)
FROM arbeiten
GROUP BY pr_nr;
In Beispiel
10.3 müssen die
Spaltennamen des Views
v_arb_anzahl explizit angegeben werden, weil die Projektion
in
der SELECT-Anweisung die
Aggregatfunktion COUNT(*)
beinhaltet.
Beispiel 10.4
Erstellen Sie ein View, das
alle Daten der
Mitarbeiter
beinhaltet, deren Standort München
ist.
CREATE VIEW
v_mch(m_nr,name,vorname,abt_nr,nr,aufg,stadt)
AS SELECT mitarbeiter.*, abteilung.*
FROM mitarbeiter, abteilung
WHERE mitarbeiter.abt_nr = abteilung.abt_nr
AND stadt = 'Muenchen';
Die Projektion beinhaltet zwei Spalten mit demselben Namen:
abt_nr. Deswegen ist es
notwendig, die Spaltennamen des Views
v_mch explizit anzugeben. (Die andere Möglichkeit wäre
die
Benutzung eines natürlichen Joins in der SELECT-Anweisung
anstatt des Equijoins. In
dem Fall wären alle Spaltennamen
des Views eindeutig.).
Die optionale Angabe
"WITH CHECK OPTION" in der CREATE
VIEW-Anweisung prüft alle
Reihen, die über
das View in
der Basistabelle eingefügt oder geändert werden. Dabei wird
die Bedingung in der
SELECT-Anweisung innerhalb CREATE VIEW
überprüft und, falls sie nicht erfüllt ist, das Ändern bzw.
Einfügen der Reihen mit einer
Fehlermeldung abgewiesen.
Falls die Angabe "WITH
CHECK OPTION" fehlt,
werden alle
Reihen ohne Überprüfung über
das View in der Basistabelle
eingefügt bzw. geändert. Es werden also auch
die Reihen
eingefügt bzw. geändert, die
die Bedingung in
der
SELECT-Anweisung nicht erfüllen. Diese Reihen
können
anschließend mit demselben View nicht abgefragt werden. Die
Beispiele 10.2 und 10.6 zeigen die
Verwendng der Angabe "WITH
CHECK OPTION".
Die
SELECT-Anweisung innerhalb CREATE
VIEW stellt eine
Unterabfrage dar. Als
solche darf sie den
UNION-Operator
und
die ORDER BY-Klausel nicht beinhalten.
Abgesehen von
diesen beiden Einschränkungen
kann jede mögliche Form der
SELECT-Anweisung benutzt werden.
Ein
View kann nicht nur aus einer Basistabelle, sondern auch
aus einem existierenden View
abgeleitet werden.
Beispiel 10.5
Erstellen Sie ein View,
das die Personalnummern aller
Sachbearbeiter in Projekt p2
beinhaltet.
CREATE VIEW v_p2_sach
AS SELECT m_nr
FROM v_sach_arb
WHERE pr_nr = 'p2';
Für die Erstellung des Views v_p2_sach
haben wir ein schon
existierendes View v_sach_arb (Beispiel 10.1) benutzt. Alle
Abfragen auf das View
v_p2_sach werden vom
System in die
Abfragen auf die Basistabelle arbeiten
umgewandelt.
Die
SELECT-Anweisung innerhalb
CREATE VIEW kann Spalten aus
zwei
oder mehreren Basistabellen beinhalten.
In Beispiel
10.4 sind mit Hilfe des Join-Operators die Basistabellen
mitarbeiter und abteilung verknüpft
und das View
v_mch
erstellt. Genauso ist es
möglich, Basistabellen mit Views
bzw. mehrere Views miteinander zu
verknüpfen.
Das
folgende Beispiel zeigt
die Verknüpfung einer
Basistabelle mit einem View.
Beispiel 10.6
Erstellen Sie ein View,
das die Personalnummern aller
Mitarbeiter enthält, die im
Projekt Apollo arbeiten. Diese
Aufgabe soll mit Hilfe des Views v_teil_pr (Beispiel 10.2)
gelöst werden.
CREATE VIEW
v_arb_teilpr
AS SELECT m_nr
FROM
arbeiten, v_teil_pr
WHERE arbeiten.pr_nr = v_teil_pr.pr_nr
AND pr_name = 'Apollo';
Mit der Anweisung
DROP VIEW view_name
wird ein
existierendes View gelöscht. Das Löschen eines Views
bedeutet das Entfernen aller Einträge aus Systemtabellen, die
im Zusammenhang mit dem View stehen.
Beispiel 10.7
DROP VIEW v_arb_anzahl;
In
diesem Beispiel wird
das View v_arb_anzahl, das
in
Beispiel 10.3 erstellt wurde,
gelöscht.
Wenn ein View gelöscht wird,
werden auch alle
aus ihm
abgeleiteten Views gelöscht.
Beispiel 10.8
DROP VIEW v_sach_arb;
Das
Löschen des Views
v_sach_arb
verursacht auch das
implizite Löschen des Views
v_p2_sach (siehe Beispiele 10.1
und 10.5).
Wie
wir schon im vorherigen Abschnitt gezeigt haben, wird
jede Abfrage auf ein
View vom System in eine
entsprechende
Abfrage auf die zugrundeliegende
Basistabelle umgewandelt.
Beispiel 10.9
Erstellen Sie ein View
mit den Personalnummern und
Namen
aller Mitarbeiter, die der
Abteilung a2 angehören. Danach
wählen Sie die Mitarbeiter aus, deren Namen
mit dem
Buchstaben "M" beginnen.
CREATE VIEW v_a2_mit
AS SELECT m_nr,
m_name
FROM mitarbeiter
WHERE abt_nr =
'a2';
SELECT m_name
FROM v_a2_mit
WHERE m_name LIKE 'M%';
Das
Ergebnis ist:
m_name |
Meier |
(1 row)
Die SELECT-Anweisung aus Beispiel
10.9 wird vom System in die
folgende Form umgewandelt:
SELECT m_name
FROM mitarbeiter
WHERE m_name LIKE
'M%'
AND abt_nr = 'a2';
Für alle Abfragen auf Views gilt folgendes: Jede
Abfrage auf
ein View ist gültig, falls die
zugrundeliegende Abfrage auf
die
Basistabelle gültig ist.
In
diesem Abschnitt wird
die Verwendung der
drei
SQL-Anweisungen -
INSERT, UPDATE und
DELETE auf Views
erörtert. Grundsätzlich gilt für
all diese Anweisungen, daß
sie nur eingeschränkt auf Views
angewendet werden können.
Das Einfügen der Reihen eines Views
bedeutet das tatsächliche
Einfügen der entsprechenden Reihen
in der
zugrundeliegenden
Basistabelle.
Beispiel 10.10
CREATE VIEW v_abt_teil
AS SELECT abt_nr, abt_name
FROM
abteilung;
INSERT INTO v_abt_teil
VALUES ('a4', 'Test');
In
Beispiel 10.10 wurde
ein View aus
der Basistabelle
abteilung erstellt,
in dem die
ersten beiden Spalten
dieser Basistabelle
ausgewählt wurden. Die
anschließende
INSERT-Anweisung weist diesen Spalten die Werte 'a4'
und
'Test' zu, während die
nicht angegebene Spalte
stadt
der
Basistabelle den NULL-Wert
zugewiesen bekommt. Die
INSERT-Anweisung wird ordnungsgemäß durchgeführt, weil
die
Spalte stadt NULL-Werte
zuläßt.
Beispiel 10.11
CREATE VIEW v_pr_teil
AS SELECT pr_name, mittel
FROM projekt;
INSERT INTO v_pr_teil
VALUES ('Luna',
2286000.00);
Beispiel 10.11 wird
nicht ordnungsgemäß
durchgeführt. Die
INSERT-Anweisung weist den Spalten
pr_name und mittel die
Werte Luna und 2286000.00 zu,
während die nicht angegebene
Spalte pr_nr der Basistabelle den NULL-Wert zugewiesen
bekommt. Dies wird vom
System mit einer
Fehlermeldung
abgewiesen, weil die Spalte pr_nr
keine NULL-Werte erlaubt.
Beispiel 10.12
CREATE VIEW v_arb_1988
AS SELECT m_nr, pr_nr, einst_dat
FROM arbeiten
WHERE einst_dat BETWEEN '01-jan-1988' AND
'31-dec-1988'
WITH CHECK OPTION;
INSERT INTO v_arb_1988
VALUES
(22334, 'p2', '15-apr-1989');
In
Beispiel 10.12 wird
die Rolle der
"WITH CHECK
OPTION"-Angabe gezeigt.
In der INSERT-Anweisung dieses
Beispiels wird überprüft, ob
der Datenwert der
Spalte
einst_dat ('15-apr-1989') die Bedingung in der
WHERE-Klausel
der SELECT-Anweisung erfüllt. Da
dies nicht der Fall ist,
wird die INSERT-Anweisung mit einer
Fehlermeldung abgewiesen.
Beispiel 10.13
CREATE VIEW v_arb_1988
AS SELECT m_nr, pr_nr, einst_dat
FROM arbeiten
WHERE einst_dat BETWEEN '01-jan-1988' AND
'31-dec-1988';
INSERT INTO v_arb_1988
VALUES (22334, 'p2', '15-apr-1989');
SELECT *
FROM v_arb_1988;
Das
Ergebnis ist:
m_nr |
pr_nr |
einst_dat |
28559 |
p1 |
01-aug-1988 |
10102 |
p1 |
01-oct-1988 |
9031 |
p3 |
15-nov-1988 |
(3
rows)
Beispiel
10.13 unterscheidet sich von
Beispiel 10.12 nur
durch die fehlende Angabe
"WITH CHECK OPTION" und der
zusätzlichen SELECT-Anweisung. In diesem Beispiel
wird
die
INSERT-Anweisung
ordnungsgemäß durchgeführt und
die
angegebene Reihe in der Basistabelle arbeiten eingefügt. Die
anschließende SELECT-Anweisung wählt,
wie das Ergebnis zeigt,
die neu eingefügte Reihe nicht
aus, weil sie mit dem View
v_arb_1988 nicht abgefragt
werden kann.
Falls das Einfügen der Reihen in der
zugrundeliegenden Basis-
tabelle mit Hilfe eines Views
durchgeführt wird, gelten dafür
folgende Einschränkungen:
a)
das View darf nur aus einer einzigen Tabelle abgeleitet
werden;
b)
keine Spalte des Views darf
aus einer Aggregatfunktion
abgeleitet werden;
c)
keine Spalte des Views darf aus
einer skalaren Funktion,
einer Konstanten oder einem
arithmetischen Ausdruck
abgeleitet werden;
d)
die SELECT-Anweisung innerhalb
CREATE VIEW darf
die
Angabe DISTINCT nicht enthalten;
e) die SELECT-Anweisung
innerhalb CREATE VIEW darf die GROUP
BY-Klausel nicht enthalten.
Beispiel
10.14
CREATE VIEW v_pr_sum(summe)
AS SELECT SUM(mittel)
FROM projekt;
SELECT *
FROM v_pr_sum;
Das
Ergebnis ist:
summe |
281500,000 |
(1 row)
Beispiel 10.14 zeigt, warum
keine Spalte eines Views
aus
einer Aggregatfunktion
abgeleitet werden darf. Wie aus dem
Ergebnis des Beispiels ersichtlich,
ist jede INSERT-Anweisung
mit dem View v_pr_sum sinnlos.
Das
Ändern der Datenwerte
eines Views bedeutet
das
tatsächliche Ändern
der entsprechenden Datenwerte der
zugrundeliegenden Basistabelle.
Beispiel 10.15
Erstellen Sie ein View,
das Personalnummer und Aufgabe aller
Mitarbeiter in Projekt p1
beinhaltet. Ändern Sie anschließend
die Aufgabe aller Projektleiter in
den NULL-Wert.
CREATE VIEW v_arb_p1
AS SELECT m_nr, aufgabe
FROM arbeiten
WHERE pr_nr = 'p1';
UPDATE var_arb_p1
SET aufgabe = NULL
WHERE aufgabe = 'Projektleiter';
Die
UPDATE-Anweisung in Beispiel
10.15 wird vom System in
folgende Anweisung umgewandelt:
UPDATE arbeiten
SET aufgabe = NULL
WHERE pr_nr = 'p1'
AND aufgabe = 'Projektleiter';
Die
Angabe "WITH CHECK
OPTION" ist für die UPDATE-Anweisung
auf dieselbe Weise wie für die
INSERT-Anweisung wirksam.
Beispiel
10.16
CREATE VIEW v_pr_100
AS SELECT pr_nr, mittel
FROM projekt
WHERE mittel >
100000
WITH CHECK OPTION;
UPDATE v_pr_100
SET mittel = 92500
WHERE pr_nr = 'p2';
Die
UPDATE-Anweisung in Beispiel 10.16 wird
abgewiesen, weil
der geänderte Datenwert der Spalte mittel in Projekt p2 die
WHERE-Bedingung nicht erfüllt.
Falls das Ändern der
Datenwerte in der zugrundeliegenden
Basistabelle mit Hilfe eines Views durchgeführt wird,
gelten
für dieses View dieselben
Einschränkungen wie für die
INSERTAnweisung.
Beispiel 10.17
CREATE VIEW v_pr_usd (pr_nr, mittel_usd)
AS SELECT pr_nr, mittel * 0.55
FROM projekt
WHERE mittel >
100000;
SELECT *
FROM v_pr_usd;
Das
Ergebnis ist:
pr_nr |
mittel_usd |
p3 |
102575,0000 |
(1 row)
Beispiel 10.17 zeigt, warum
keine Spalte eines Views
aus
einem arithmetischen Ausdruck abgeleitet werden
darf. Das
View v_pr_usd
beinhaltet alle Reihen
der Basistabelle
projekt, deren Mittel größer als DM 100.000 sind.
Zusätzlich
dazu
enthält dieses View eine Spalte mittel_usd, die
aus
der
Spalte mittel durch
Multiplizieren abgeleitet ist.
(Die
Geldmittel sind damit statt in DM in US$ angegeben.).
Aus
dem Ergebnis der
anschließenden SELECT-Anweisung wird
offensichtlich, daß jede
UPDATE-Anweisung mit der
Spalte
mittel_usd nicht möglich ist.
Das Löschen der Reihen einer
Basistabelle kann auch mit Hilfe
eines abgeleiteten Views durchgeführt
werden.
Beispiel 10.18
CREATE VIEW v_arb_p1
AS SELECT m_nr, aufgabe
FROM arbeiten
WHERE pr_nr = 'p1';
DELETE FROM v_arb_p1
WHERE
aufgabe = 'Sachbearbeiter';
Die DELETE-Anweisung in Beispiel
10.18 wird vom INGRES-System
in folgende Anweisung umgewandelt:
DELETE FROM arbeiten
WHERE pr_nr = 'p1'
AND aufgabe = 'Sachbearbeiter';
Wie
für das Ändern und Einfügen
gelten auch für das Löschen
der Reihen mit Hilfe eines Views
einige Einschränkungen:
a)
das View darf nur aus einer einzigen Tabelle
abgeleitet
werden;
b)
keine Spalte des
Views darf aus einer Aggregatfunktion
abgeleitet werden;
c)
die SELECT-Anweisung innerhalb CREATE VIEW darf die GROUP
BY-Klausel nicht enthalten;
d)
die SELECT-Anweisung innerhalb
CREATE VIEW darf
die
Angabe DISTINCT nicht enthalten.
Im
Unterschied zur INSERT- und
UPDATE-Anweisung erlaubt die
DELETE-Anweisung die Verwendung
solcher Views, die aus einem
arithmetischen Ausdruck,
einer skalaren Funktion oder einer
Konstante abgeleitet sind.
Beispiel
10.19
CREATE VIEW
v_pr_mult(mult_f)
AS SELECT mittel*
0.55
FROM projekt;
DELETE FROM v_pr_mult;
Mit der DELETE-Anweisung werden
alle Reihen der
Tabelle
projekt, die dem View v_pr_mult
zugrunde liegt, gelöscht.
A.10.1 Erstellen Sie
ein View, das die Daten aller
Mitarbeiter
enthält, die im Jahr 1988
eingestellt worden sind.
A.10.2 Erstellen Sie
ein View, das die Daten aller
Mitarbeiter
enthält, die der Abteilung a3 angehören.
A.10.3 Erstellen Sie
ein View, das Namen und
Vornamen aller
Mitarbeiter beinhaltet, die im
Projekt p3 arbeiten.
A.10.4 Überprüfen
Sie, ob Ihre Lösung der Aufgabe
A.10.3 ein
View darstellt, das modifizierbar ist. Ist das nicht der
Fall, erstellen Sie ein solches
View.
A.10.5 Erstellen
Sie ein View, das Personalnummer und Aufgabe
aller Mitarbeiter
enthält, die im
Projekt Merkur
arbeiten.
A.10.6 Erstellen Sie
ein View, das Namen und
Vornamen aller
Mitarbeiter enthält, deren Personalnummer
kleiner als
10000 ist. Das View soll die
WHERE-Klausel jeder UPDATE-
bzw. DELETE-Anweisung überprüfen.
A.10.7 Schreiben Sie
für das in A.10.6
erstellte View eine
INSERT-Anweisung, die vom INGRES-System akzeptiert wird,
und eine DELETE-Anweisung, die
abgewiesen wird.