Visszajelzés
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éssel
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ökként!');
WHEN nincsjob THEN
DBMS_OUTPUT.PUT_LINE('Nincs ilyen munkakör! Csak már létező adható meg!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Egyéb hiba');
END;
/