Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Un Trigger care sa se declanseze inainte de modificare salariului si sa afiseze un mesaj
  2. SET SERVEROUTPUT ON
  3. CREATE OR REPLACE TRIGGER inainte
  4. BEFORE UPDATE OF salariul ON angajati
  5. FOR EACH ROW
  6. BEGIN
  7. DBMS_OUTPUT.PUT_LINE('Trigger inainte de modificarea salariului');
  8. END;
  9.  
  10. UPDATE angajati SET salariul = salariul - 100 WHERE id_departament = 80;
  11.  
  12. --Sa se afiseze salariul vechi si nou
  13. CREATE OR REPLACE TRIGGER inainte
  14. BEFORE UPDATE OF salariul ON angajati
  15. FOR EACH ROW
  16. BEGIN
  17. DBMS_OUTPUT.PUT_LINE('Salariul vechi are valoarea '||:OLD.salariul||' si salariul nou are valoarea '||:NEW.salariul);
  18. END;
  19.  
  20. --Un Trigger care sa se declanseze la insert de angajat sau update de salariu si care sa impiedice specificarea unui salariul mai mic decat cel min sau mai mare decat cel maxim din tabela functii
  21. CREATE OR REPLACE TRIGGER verifica_salariul
  22. BEFORE UPDATE OF salariul OR INSERT ON angajati
  23. FOR EACH ROW
  24. DECLARE
  25. sal_min functii.salariu_min%TYPE;
  26. sal_max functii.salariu_max%TYPE;
  27. BEGIN
  28. SELECT salariu_min,salariu_max INTO sal_min,sal_max FROM  functii WHERE id_functie = :NEW.id_functie;
  29. IF :NEW.salariul > sal_max OR :NEW.salariul < sal_min
  30. THEN RAISE_APPLICATION_ERROR(-20000,'Salariul nu este in limitele functiei');
  31. END IF;
  32. END;
  33.  
  34. UPDATE angajati SET salariul = 13000 WHERE id_angajat = 198;
  35.  
  36. --Un Trigger care sa se declanseze doar atunci cand se incearca marirea salariului unui angajat cu vechime mai mare de 20 de ani
  37. CREATE OR REPLACE TRIGGER vechime20
  38. BEFORE UPDATE OF salariul ON angajati
  39. FOR EACH ROW
  40. WHEN(NEW.salariul > OLD.salariul)
  41. DECLARE
  42. vechime NUMBER;
  43. BEGIN
  44. vechime:= ROUND((SYSDATE-:OLD.data_angajare)/365);
  45. IF vechime > 20
  46. THEN RAISE_APPLICATION_ERROR(-20001,'Vechimea este mai mare de 20 de ani');
  47. END IF;
  48. END;
  49.  
  50. UPDATE angajati SET data_angajare = '01-MAR-1980' WHERE id_angajat = 198;
  51.  
  52. UPDATE angajati SET salariul = salariul + 10 WHERE id_angajat = 198;
  53.  
  54. UPDATE angajati SET salariul = salariul - 10 WHERE id_angajat = 198;
  55.  
  56. --Un Trigger prin care in momentul modificarii functiei unui angajat se va adauga automat o inregistrare noua in tabela istoric_functii
  57. --Daca angajatul nu si-a mai schimbat functia data de inceput in functia noua va fi data angajarii iar cea de sfarsit data curenta
  58. --Daca angajatul si-a mai schimbat functia data de inceput in functia noua va fi ultima data de sfarsit pe o functie detinuta anterior
  59. --In momentul stergerii unui angajat se vor sterge automat toate referirile despre angajat din tabela istoric_functii
  60.  
  61. CREATE OR REPLACE TRIGGER istoric_functii
  62. BEFORE UPDATE OF id_functie OR DELETE ON angajati
  63. FOR EACH ROW
  64. BEGIN
  65.  
  66. IF UPDATING
  67. THEN IF :NEW.id_angajat  NOT IN (SELECT id_angajat FROM istoric_functii)
  68. THEN INSERT INTO istoric_functii VALUES (:NEW.id_angajat,:OLD.id_functie,:OLD.data_angajare,SYSDATE);
  69. ELSE UPDATE istoric_functii SET data_inceput =
  70.  
  71. --DE TERMINAT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement