TEXT   70
Trigger 1 feladat
Guest on 10th May 2022 05:53:37 PM


  1. Trigger 1. feladat
  2. ------------------
  3. /*
  4.  * Trigger, ami csak bizonyos feltĂŠtelek esetĂŠn engedi meg
  5.  * a beszĂşrĂĄst, egyĂŠbkĂŠnt megakadĂĄlyozza azt.
  6.  *
  7.  * FeltĂŠtel:
  8.  *   - csak lĂŠtező dolgozĂł adhatĂł meg főnĂśkkĂŠnt
  9.  *   - csak mĂĄr lĂŠtező munkakĂśr adhatĂł meg
  10.  *   - Ăşj dolgozĂł az azonos munkakĂśrben dolgozĂłkkal
  11.  *     szemben csak alacsonyabb fizetĂŠst kaphat
  12.  */
  13.  
  14. Bånkeszi Ádåm megoldåsa felhasznålói hibaßzenet generålåsåval
  15. -------------------------------------------------------------
  16. CREATE OR REPLACE TRIGGER INSERT_CONSTRAINT
  17.   BEFORE INSERT ON emp
  18. FOR EACH ROW
  19. DECLARE
  20.   fonok_letezik NUMBER;
  21.   munkakor_letezik NUMBER;
  22.   min_fizetes NUMBER;
  23. BEGIN
  24.   -- főnĂśk lĂŠtezĂŠsĂŠnek vizsgĂĄlata
  25.   SELECT COUNT(*) INTO fonok_letezik
  26.     FROM emp
  27.     WHERE EMPNO = :NEW.MGR;
  28.   IF (fonok_letezik != 1) THEN
  29.     RAISE_APPLICATION_ERROR(-20010, 'Nem lĂŠtezik ilyen dolgozĂł kĂłdĂş főnĂśk!');
  30.   END IF;
  31.  
  32.   -- munkakĂśr lĂŠtezĂŠsĂŠnek vizsgĂĄlata
  33.   SELECT COUNT(*) INTO munkakor_letezik
  34.     FROM emp
  35.     WHERE JOB = :NEW.JOB;
  36.   IF (munkakor_letezik < 1) THEN
  37.     RAISE_APPLICATION_ERROR(-20011, 'Nem lĂŠtezik ilyen munkakĂśr!');
  38.   END IF;
  39.  
  40.   -- fizetĂŠs ellenőrzĂŠse
  41.   SELECT MIN(sal) INTO min_fizetes
  42.     FROM emp
  43.     WHERE JOB = :NEW.JOB;
  44.   IF (:NEW.SAL >= min_fizetes) THEN
  45.     RAISE_APPLICATION_ERROR(-20012, 'Új dolgozĂł csak alacsonyabb fizetĂŠst kaphat az azonos munkakĂśrben dolgozĂłkhoz kĂŠpest!');
  46.   END IF;
  47. END;
  48.  
  49. -- főnök hiba tesztelése
  50. INSERT INTO emp VALUES (1111, 'TEST', 'CLERK', 1000, SYSDATE, 1, 10, 10);
  51.  
  52. -- munkakĂśr hiba tesztelĂŠse
  53. INSERT INTO emp VALUES (1111, 'TEST', 'TEST', 7839, SYSDATE, 1, 10, 10);
  54.  
  55. -- fizetĂŠs hiba tesztelĂŠse
  56. INSERT INTO emp VALUES (1111, 'TEST', 'CLERK', 7839, SYSDATE, 99999, 10, 10);
  57.  
  58.  
  59.  
  60. Papp Norbert megoldĂĄsa kivĂŠtelkezelĂŠssesel
  61. ------------------------------------------
  62. CREATE OR REPLACE TRIGGER feladat
  63. BEFORE INSERT ON emp
  64. FOR EACH ROW
  65. DECLARE
  66.   minim EMP.SAL%TYPE;
  67.   mgrvane INTEGER;
  68.   jobvane INTEGER;
  69.   sokfizetes EXCEPTION;
  70.   nincsjob EXCEPTION;
  71.   nincsmgr EXCEPTION;
  72. BEGIN
  73.   SELECT COUNT(*) INTO mgrvane FROM EMP WHERE empno = :NEW.mgr;
  74.   SELECT COUNT(*) INTO jobvane FROM EMP WHERE job = :NEW.job;
  75.   SELECT MIN(sal) INTO minim FROM EMP WHERE job = :NEW.job;
  76.   IF minim <= :NEW.sal THEN
  77.     RAISE sokfizetes;
  78.   ELSIF mgrvane = 0 THEN
  79.     RAISE nincsmgr;
  80.   ELSIF jobvane = 0 THEN
  81.     RAISE nincsjob;
  82.   END IF;
  83. EXCEPTION
  84. WHEN sokfizetes THEN
  85. DBMS_OUTPUT.PUT_LINE('TĂşl sok fizetĂŠs! Azonos munkakĂśrĹą dolgozĂłknĂĄl csak kisebb fizetĂŠst kaphat!');
  86.     WHEN nincsmgr THEN
  87. DBMS_OUTPUT.PUT_LINE('Nincs ilyen dolgozĂł az adatbĂĄzisban! Csak lĂŠtező dolgozĂł adhatĂł meg főnĂ

Raw Paste

Login or Register to edit or fork this paste. It's free.