- Trigger 1. feladat
- ------------------
- /*
- * Trigger, ami csak bizonyos feltĂŠtelek esetĂŠn engedi meg
- * a beszĂşrĂĄst, egyĂŠbkĂŠnt megakadĂĄlyozza azt.
- *
- * FeltĂŠtel:
- * - csak lĂŠtezĹ dolgozĂł adhatĂł meg fĹnĂśkkĂŠnt
- * - csak mĂĄr lĂŠtezĹ munkakĂśr adhatĂł meg
- * - Ăşj dolgozĂł az azonos munkakĂśrben dolgozĂłkkal
- * szemben csak alacsonyabb fizetĂŠst kaphat
- */
- BĂĄnkeszi ĂdĂĄm megoldĂĄsa felhasznĂĄlĂłi hibaĂźzenet generĂĄlĂĄsĂĄval
- -------------------------------------------------------------
- CREATE OR REPLACE TRIGGER INSERT_CONSTRAINT
- BEFORE INSERT ON emp
- FOR EACH ROW
- DECLARE
- fonok_letezik NUMBER;
- munkakor_letezik NUMBER;
- min_fizetes NUMBER;
- BEGIN
- -- fĹnĂśk lĂŠtezĂŠsĂŠnek vizsgĂĄlata
- SELECT COUNT(*) INTO fonok_letezik
- FROM emp
- WHERE EMPNO = :NEW.MGR;
- IF (fonok_letezik != 1) THEN
- RAISE_APPLICATION_ERROR(-20010, 'Nem lĂŠtezik ilyen dolgozĂł kĂłdĂş fĹnĂśk!');
- END IF;
- -- munkakĂśr lĂŠtezĂŠsĂŠnek vizsgĂĄlata
- SELECT COUNT(*) INTO munkakor_letezik
- FROM emp
- WHERE JOB = :NEW.JOB;
- IF (munkakor_letezik < 1) THEN
- RAISE_APPLICATION_ERROR(-20011, 'Nem lĂŠtezik ilyen munkakĂśr!');
- END IF;
- -- fizetĂŠs ellenĹrzĂŠse
- SELECT MIN(sal) INTO min_fizetes
- FROM emp
- WHERE JOB = :NEW.JOB;
- IF (:NEW.SAL >= min_fizetes) THEN
- RAISE_APPLICATION_ERROR(-20012, 'Ăj dolgozĂł csak alacsonyabb fizetĂŠst kaphat az azonos munkakĂśrben dolgozĂłkhoz kĂŠpest!');
- END IF;
- END;
- -- fĹnĂśk hiba tesztelĂŠse
- INSERT INTO emp VALUES (1111, 'TEST', 'CLERK', 1000, SYSDATE, 1, 10, 10);
- -- munkakĂśr hiba tesztelĂŠse
- INSERT INTO emp VALUES (1111, 'TEST', 'TEST', 7839, SYSDATE, 1, 10, 10);
- -- fizetĂŠs hiba tesztelĂŠse
- INSERT INTO emp VALUES (1111, 'TEST', 'CLERK', 7839, SYSDATE, 99999, 10, 10);
- Papp Norbert megoldĂĄsa kivĂŠtelkezelĂŠssesel
- ------------------------------------------
- CREATE OR REPLACE TRIGGER feladat
- BEFORE INSERT ON emp
- FOR EACH ROW
- DECLARE
- minim EMP.SAL%TYPE;
- mgrvane INTEGER;
- jobvane INTEGER;
- sokfizetes EXCEPTION;
- nincsjob EXCEPTION;
- nincsmgr EXCEPTION;
- BEGIN
- SELECT COUNT(*) INTO mgrvane FROM EMP WHERE empno = :NEW.mgr;
- SELECT COUNT(*) INTO jobvane FROM EMP WHERE job = :NEW.job;
- SELECT MIN(sal) INTO minim FROM EMP WHERE job = :NEW.job;
- IF minim <= :NEW.sal THEN
- RAISE sokfizetes;
- ELSIF mgrvane = 0 THEN
- RAISE nincsmgr;
- ELSIF jobvane = 0 THEN
- RAISE nincsjob;
- END IF;
- EXCEPTION
- WHEN sokfizetes THEN
- DBMS_OUTPUT.PUT_LINE('TĂşl sok fizetĂŠs! Azonos munkakĂśrĹą dolgozĂłknĂĄl csak kisebb fizetĂŠst kaphat!');
- WHEN nincsmgr THEN
- DBMS_OUTPUT.PUT_LINE('Nincs ilyen dolgozĂł az adatbĂĄzisban! Csak lĂŠtezĹ dolgozĂł adhatĂł meg fĹnĂ
Raw Paste