Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N

Transcription

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N
Uni Duisburg-Essen
Fachgebiet Informationssysteme
Prof. Dr. N. Fuhr
Praktikum Datenbanken / DB2
Woche 7: Noch mehr SQL (Fortgeschrittene Konzepte)
Musterlösung
(b) Definiert einen neuen Index für Genres, damit Suchaktionen nach Produktionen eines bestimmten Genres schneller gehen.
CREATE INDEX i_genre
ON genre (genre);
(c) Nehmt Euch das erste Beispiel für Trigger als Vorlage und schreibt einen
entsprechenden Trigger für ein DELETE auf der Tabelle schauspieler,
der die Filmzahl wieder reduziert.
CREATE TRIGGER delete_movie
AFTER DELETE ON schauspieler
REFERENCING OLD AS o
FOR EACH ROW MODE DB2SQL
UPDATE fps
SET anzahl_filme = anzahl_filme - 1
WHERE o.name = fps.name
(d) Im Falle eines UPDATE auf der Tabelle schauspieler sieht die Lage ein
wenig komplexer aus. Schreibt einen Trigger, der die verschiedenen Fälle
berücksichtigt und fps korrekt ändert.
CREATE TRIGGER update_movie
AFTER UPDATE OF name ON schauspieler
REFERENCING OLD AS o NEW AS n
FOR EACH ROW MODE DB2SQL
BEGIN
UPDATE fps
SET anzahl_filme = anzahl_filme - 1
WHERE o.name = fps.name;
IF EXISTS (SELECT * FROM fps WHERE n.name=fps.name)
THEN UPDATE fps
SET anzahl_filme = anzahl_filme +1
WHERE n.name = fps.name;
ELSE INSERT INTO fps VALUES (n.name, 1);
END IF;
END
(e) Schreibt ein rekursives SELECT-Statement, das alle (direkten und indirekten) Referenzen auf die Produktion ’Buffy the Vampire Slayer’ ermittelt.
WITH buffy (p1,p2,j) AS (
SELECT b.produktion1,b.produktion2,b.jahr2
FROM beziehung b
WHERE b.art=’referenced in’
AND b.produktion1=’Buffy the Vampire Slayer’
UNION ALL
SELECT k.produktion1,k.produktion2,k.jahr2
Praktikum Datenbanken / DB2
Woche 7: Noch mehr SQL (Fortgeschrittene Konzepte)
Seite 1 von 2
Uni Duisburg-Essen
Fachgebiet Informationssysteme
Prof. Dr. N. Fuhr
FROM buffy v, beziehung k
WHERE v.p2=k.produktion1
AND v.j=k.jahr1
AND k.art=’referenced in’)
SELECT DISTINCT p2 concat ’ (’ concat cast(j as char(4)) concat ’)’ AS Titel,
p1 AS Referenziert
FROM buffy
ORDER BY p1;
Achtung: Die Bedingung f.jahr=c.jahr1 ist notwendig. Wir erinnern
uns, dass Produktionen nur durch Titel UND Jahr eindeutig identifiert
werden. Ohne die Bedingung erhalten wir eine unendliche Schleife.
TITEL
REFERENZIERT
-------------------------------------------------------- ------------------------SQL0347W The recursive common table expression "DBPW0323.BUFFY" may contain
an infinite loop. SQLSTATE=01605
001 MTV Movie Awards (2001)
Jay and Silent Bob Strike Back (2001)
Alien Saga, The (2002)
Bring It On (2000)
Brothers, The (2001)
Farscape (1999)
Fatal Kiss (2002)
I’ve Been Waiting for You (1998)
Jay and Silent Bob Strike Back (2001)
Josie and the Pussycats (2001)
Knight’s Tale, A (2001)
Max Payne (2001)
S Club 7: Artistic Differences (2000)
Undercover Brother (2002)
Valentine (2001)
Rugrats Go Wild! (2003)
Burning Annie (2003)
Evening with Kevin Smith, An (2002)
Lammbock (2001)
Legally Blonde (2001)
Hello, He Lied & Other Truths From the ... (2002)
Death to Smoochy (2002)
Duke Nukem: Manhattan Project (2002)
Enter the Matrix (2003)
StarCraft: Ghost (2003)
Austin Powers in Goldmember (2002)
Dead or Alive Xtreme Beach Volleyball (2003)
Hey Arnold! The Movie (2002)
Like Mike (2002)
Bring It On
Bring It On
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Buffy the Vampire Slayer
Dead or Alive Xtreme Beach
Jay and Silent Bob Strike Back
Jay and Silent Bob Strike Back
Jay and Silent Bob Strike Back
Josie and the Pussycats
Legally Blonde
Max Payne
Max Payne
Max Payne
Max Payne
Undercover Brother
Undercover Brother
Undercover Brother
Undercover Brother
29 record(s) selected with 1 warning messages printed.
Praktikum Datenbanken / DB2
Woche 7: Noch mehr SQL (Fortgeschrittene Konzepte)
Seite 2 von 2