mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 21:03:07 +02:00
git-subtree-dir: NotProgramming/EDABA-LAB git-subtree-mainline:b88865222bgit-subtree-split:cc8d63c734
97 lines
3.3 KiB
SQL
97 lines
3.3 KiB
SQL
-- 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
|
|
|