diff --git a/SQL stuff/Krzysztof_Rudnicki-EDABA_Lab-3.sql b/SQL stuff/Krzysztof_Rudnicki-EDABA_Lab-3.sql index f91fb5fa..bca163bb 100644 --- a/SQL stuff/Krzysztof_Rudnicki-EDABA_Lab-3.sql +++ b/SQL stuff/Krzysztof_Rudnicki-EDABA_Lab-3.sql @@ -1 +1,96 @@ ---Krzysztof Rudnicki 307585 - EDABA Lab 3 \ No newline at end of file +-- Author: Krzysztof Rudnicki +-- Student number: 307585 + +--=======================insert_trigger======================= + +-- show data +-- show competition which reputation was affected by attendance of the newly inserted match +select * from competition where id = 1 +-- show match who is inserted and by that affects competition reputation +select * from match where id = 1234567 + +-- create trigger +-- set competition reputation equal to max (5) reputation if the match in this competition was attended by at least 10k people, and to 1 otherwise +CREATE OR REPLACE trigger match_insert_trigger after insert on match +for each row +begin + update competition + set reputation = 5 + where id = :NEW.competition_id AND :NEW.attendance > 10000; + + update competition + set reputation = 1 + where id = :NEW.competition_id AND :NEW.attendance < 10000; +end; + +-- trigger trigger +-- insert +-- sufficient (at least 10k attendance) to change competition reputation +insert into match +values(1234567, 10, 5, 30000, 'sunny', 90, To_date(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '1900-01-01','J') ,TO_CHAR(DATE '2023-12-31','J'))), 'J'), 'referre', 1) + +-- insufficient (less than 10k attendance) to change competition reputation +insert into match +values(1234567, 10, 5, 3000, 'sunny', 90, To_date(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '1900-01-01','J') ,TO_CHAR(DATE '2023-12-31','J'))), 'J'), 'referre', 1) + +delete from match where id = 1234567 + +--=======================update_trigger======================= + +-- Run before/after trigger +-- show club affected by update trigger when manager reputation influences club reputation +select * from club where manager_id = 1 +-- show manager which update influences club reputation +select * from manager where id = 1 + + +-- Run to create trigger +-- updates club reputation if the competition the club is taking part in has high enough prize value +CREATE OR REPLACE trigger update_maanger_trigger after update on manager +for each row +begin + update club + set reputation = :NEW.reputation + where id = :NEW.club_id; +end; + +-- Run to trigger trigger +-- update +-- update manager reputation to 1 and trigger update for club to set reputation to 1 +update manager + set reputation = 1 +where id = 1; + +-- update manager reputation to 5 and trigger update for club to set reputation to 5 +update manager + set reputation = 5 +where id = 1; + + + +--=======================delete_trigger======================= + +-- show data +-- show competition which reputation was affected by attendance of the newly inserted match +select * from competition where id = 1 +-- show match who is inserted and by that affects competition reputation +select * from match where id = 1234567 + +-- create trigger +-- set competition reputation equal to min (1) reputation if the match deleted from competition was attended by at least 10k people, and to 5 otherwise +CREATE OR REPLACE trigger match_delete_trigger after delete on match +for each row +begin + update competition + set reputation = 1 + where id = :OLD.competition_id AND :OLD.attendance > 10000; +end; + +-- trigger trigger +-- insert +-- sufficient (at least 10k attendance) to change competition reputation +insert into match +values(1234567, 10, 5, 30000, 'sunny', 90, To_date(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '1900-01-01','J') ,TO_CHAR(DATE '2023-12-31','J'))), 'J'), 'referre', 1) + +delete from match where id = 1234567 +