Guest User

Untitled

a guest
May 24th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.97 KB | None | 0 0
  1. --1. trigger usówający film wraz z biletami reżyserem i niszczący powiązania z aktorami
  2.  
  3. CREATE OR REPLACE TRIGGER usun_film
  4. BEFORE DELETE ON Film
  5. FOR EACH ROW
  6.  
  7. BEGIN
  8.   DELETE FROM wyswietla w WHERE w.Id_filmu = :OLD.Id_filmu;
  9.   DELETE FROM zagrali z WHERE z.Id_filmu = :OLD.Id_filmu;
  10.   DELETE FROM Bilet b WHERE b.Id_filmy = :OLD.Id_filmu;
  11.   DELETE FROM Rezyser r WHERE r.Id_filmu = :OLD.Id_filmu;
  12. END;
  13. /
  14.  
  15. DELETE FROM Film WHERE Film.Id_filmu = 3;
  16.  
  17. --2. trigger śledzący zmiany dokonywane w tabeli Film
  18.  
  19. DROP SEQUENCE szpieguj_s;
  20.  
  21. CREATE SEQUENCE szpieguj_s ORDER;
  22.  
  23. DROP TABLE Szpieguj_inf CASCADE CONSTRAINTS;
  24.  
  25. CREATE TABLE Szpieguj_inf(
  26.   Id_op NUMBER(6),
  27.   Rodzaj_op VARCHAR2(10),
  28.   DATA DATE,
  29.   Uzytkownik VARCHAR2(30),
  30.   Tytul VARCHAR2(100)
  31. );
  32.  
  33. CREATE OR REPLACE TRIGGER szpieguj
  34. BEFORE INSERT OR UPDATE OR DELETE ON Film
  35. FOR EACH ROW
  36.  
  37. BEGIN
  38.   CASE
  39.     WHEN INSERTING THEN
  40.       INSERT INTO Szpieguj_inf(Id_op, Rodzaj_op, DATA, Uzytkownik, Tytul) VALUES (szpieguj_s.NEXTVAL, 'INSERT', SYSDATE, ORA_LOGIN_USER, :NEW.Tytul);
  41.     WHEN UPDATING THEN
  42.       INSERT INTO Szpieguj_inf(Id_op, Rodzaj_op, DATA, Uzytkownik, Tytul) VALUES (szpieguj_s.NEXTVAL, 'UPDATE', SYSDATE, ORA_LOGIN_USER, :OLD.Tytul);
  43.     WHEN DELETING THEN
  44.       INSERT INTO Szpieguj_inf(Id_op, Rodzaj_op, DATA, Uzytkownik, Tytul) VALUES (szpieguj_s.NEXTVAL, 'DELETE', SYSDATE, ORA_LOGIN_USER, :OLD.Tytul);
  45.   END CASE;
  46. END;
  47. /
  48.  
  49. SELECT * FROM Szpieguj_inf;
  50.  
  51. --3. trigger zabespiecz przed ustawieniem zbyt wysokiej ceny biletu
  52.  
  53. CREATE OR REPLACE TRIGGER sprawdz_cene_biletu
  54. BEFORE INSERT OR UPDATE ON Bilet
  55. FOR EACH ROW
  56.  
  57. BEGIN
  58.   IF :NEW.Cena > 30 THEN
  59.   CASE
  60.     WHEN UPDATING THEN
  61.       :NEW.Cena := :OLD.Cena;
  62.     WHEN INSERTING THEN
  63.       :NEW.Cena := 29;
  64.   END CASE;
  65.   END IF;
  66. END;
  67. /
  68.  
  69. UPDATE Bilet SET Cena = 100 WHERE Id_biletu = 3;
  70. SELECT * FROM Bilet WHERE Id_biletu = 3;
  71. INSERT INTO Bilet VALUES (6666, 10, 6, 100, 0, 0300022);
  72. SELECT * FROM Bilet WHERE Id_biletu = 6666;
Add Comment
Please, Sign In to add comment