create table dolgozo (azon NUMBER, nev VARCHAR2(100), ero_szint NUMBER, fizetes NUMBER, fonok NUMBER); create table naplo (uzi VARCHAR2(100), datum DATE); create or replace trigger f1 after insert or update or delete on dolgozo BEGIN IF INSERTING THEN insert into naplo values ('Beszúrás utasítás történt', SYSDATE); ELSIF UPDATING THEN insert into naplo values ('Frissítés utasítás történt', SYSDATE); ELSE insert into naplo values ('Törlés utasítás történt', SYSDATE); END IF; END; / set serveroutput on create or replace trigger f2 before insert on dolgozo for each row BEGIN SELECT NVL(MAX(azon),0)+1 INTO :NEW.azon FROM dolgozo; IF :NEW.ero_szint>9000 THEN dbms_output.put_line('It''s over 9000!!!'); END IF; END; / create or replace trigger f3 before insert on dolgozo for each row DECLARE TEMP NUMBER; BEGIN SELECT COUNT(*) INTO TEMP FROM DOLGOZO WHERE (fizetes>:NEW.fizetes AND ero_szint<:NEW.ero_szint) OR (fizetes<:NEW.fizetes AND ero_szint>:NEW.ero_szint); IF TEMP>0 THEN RAISE_APPLICATION_ERROR(-20111, 'Ez így nem túl igazságos!'); END IF; END; / create or replace trigger f4 before insert on dolgozo for each row DECLARE CURSOR cur IS SELECT azon FROM dolgozo WHERE ero_szint>:NEW.ero_szint; minbeosztott NUMBER:=NULL; beosztott NUMBER; BEGIN FOR sor IN cur LOOP SELECT COUNT(*) INTO beosztott FROM dolgozo WHERE fonok=sor.azon; IF minbeosztott IS NULL OR minbeosztott>beosztott THEN minbeosztott:=beosztott; :NEW.fonok:=sor.azon; END IF; END LOOP; END; /