diff --git a/SQL stuff/Maciej_Domanski-EDABA_Lab-3.sql b/SQL stuff/Maciej_Domanski-EDABA_Lab-3.sql index 83ef2536..83bc1d3e 100644 --- a/SQL stuff/Maciej_Domanski-EDABA_Lab-3.sql +++ b/SQL stuff/Maciej_Domanski-EDABA_Lab-3.sql @@ -1,70 +1,69 @@ --Maciej Domański 303853 - EDABA Lab 3 +----------------------- INSERT TRIGGER ----------------------- - --- Show data before triggers -select * from competition where id < 10 -select * from club where competition_id = 1 +-- show club which budget was affected by inserting or deleting new/old player +select * from club where id = 1 +-- show player who is inserted and by that affects club budget +select * from player where id = 1000000 -- insert trigger creation +-- after inserting a player increase club budget by player value +CREATE OR REPLACE trigger insert_player_trigger after insert on player +for each row +begin + update club + set budget = budget + :NEW.transfer_value + where :NEW.club_id = id; +end; + +-- insert +insert into player +values(1000000, 5, 'striker', 3, 'valid', 5, 35, 1000, 20000000, 1) + +----------------------- UPDATE TRIGGER ----------------------- + +-- Show data that is affected by triggers +-- show competition where prize was updated which later changes club reputation +select * from competition where id = 1 +-- show club affected by update trigger when competition prize is high enough +select * from club where competition_id = 1 -- update trigger creation +-- updates club reputation if the competition the club is taking part in has high enough prize value CREATE OR REPLACE trigger update_trigger after update on competition for each row begin update club - set budget = 2000 - where 20 < :NEW.prize AND :NEW.id = competition_id; + set reputation = 5 + where 200000 < :NEW.prize AND :NEW.id = competition_id; end; --- delete trigger creation - --- Show data that triggers trigger - --- trigger triggers +-- update update competition -set prize = 1000 +set prize = 1234567 where id = 1; --- Show data after trigger -select * from competition where id < 10 -select * from club where competition_id = 1 + +----------------------- DELETE TRIGGER ----------------------- + +-- Show data that is affected by triggers +-- show club which budget was affected by inserting or deleting new/old player +select * from club where id = 1 +-- select player who is inserted and by that affects club budget +select * from player where id = 1000000 + +-- delete trigger creation +-- after deleting a player decrease club budget by player value +CREATE OR REPLACE trigger delete_player_trigger after delete on player +for each row +begin + update club + set budget = budget - :OLD.transfer_value + where :OLD.club_id = id; +end; - - --- NEW - valid only for insert/update --- OLD - delete/upate ---CREATE OR REPLACE trigger update_nb_emp after insert or update or delete on emp ---for each row ---begin --- -- increase number of employes in given department --- update dept --- set nb_emp = nb_emp +1 --- where deptno = :NEW.deptno; --- --- -- decrease number of employes in given department --- -- here we do not decrease number of employees if there are no data in department because of OLD --- update dept --- set nb_emp = nb_emp -1 --- where deptno = :OLD.deptno; ---end; --- --- ---select * from dept; ---select * from emp; ---insert into emp ---values(800, 'John', 'Rambo', 7788,'2022-01-20',7000, 0,40); --- ---update emp ---set deptno = 30 ---where empno = 800 --- ---delete from emp ---where empno = 800 --- ---select * from emp --- ---update dept ---set nb_emp = (select count(*) from emp where emp.deptno = dept.deptno) --- +-- delete +delete from player +where id = 1000000