WUT_Computer_Science/NotProgramming/EDABA-LAB/SQL stuff/Krzysztof_Rudnicki-EDABA_Lab-3.sql

97 lines
3.3 KiB
MySQL
Raw Permalink Normal View History

2023-01-20 12:45:26 +01:00
-- 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