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