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