Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --sa se creeze un trigger care sa se declanseze inainte de modificarea salariului unui angajat si care sa afiseze un mesaj
- SET SERVEROUTPUT ON
- CREATE OR REPLACE TRIGGER modificare_salariu
- BEFORE UPDATE OF salariul ON angajati
- BEGIN
- DBMS_OUTPUT.PUT_LINE('OK');
- END;
- UPDATE angajati
- SET salariul = salariul-100
- WHERE id_departament = 80;
- --sa se creeze un trigger care sa se declanseze inainte de modificarea salariului unui angajat si care sa afiseze un mesaj
- CREATE OR REPLACE TRIGGER modificare_salariu
- BEFORE UPDATE OF salariul ON angajati
- FOR EACH ROW
- BEGIN
- DBMS_OUTPUT.PUT_LINE(:OLD.salariul||' '||:NEW.salariul);
- END;
- UPDATE angajati
- SET salariul = salariul-100
- WHERE id_departament = 80;
- --sa se construiasca un trigger care sa se declanseze in momentul adaugarii unui angajat nou sau la modificarea salariului unui angajat existent
- --si care sa impiedice specificarea unui salariu care nu se afla in limitele indicate de sal_min & sal_max din tabela functii
- CREATE OR REPLACE TRIGGER adauga_ang
- BEFORE UPDATE OF salariul OR INSERT ON angajati
- FOR EACH ROW
- DECLARE
- v_sal_min functii.salariu_min%TYPE;
- v_sal_max functii.salariu_max%TYPE;
- BEGIN
- SELECT salariu_min, salariu_max INTO v_sal_min, v_sal_max FROM functii WHERE id_functie = :NEW.id_functie;
- IF :NEW.salariul NOT BETWEEN v_sal_min AND v_sal_max
- THEN RAISE_APPLICATION_ERROR(-20001, 'out of range!');
- END IF;
- END;
- UPDATE angajati
- SET salariul = salariul+100000
- WHERE id_angajat = 100;
- --sa se construiasca un trgger care sa se declanseze doar atunci cand se incearca marirea salariului unui angajat cu o vechime mai mica de 20 de ani
- CREATE OR REPLACE TRIGGER respecta_vechimea
- BEFORE UPDATE OF salariul ON angajati
- FOR EACH ROW
- BEGIN
- IF :NEW.salariul > :OLD.salariul AND (SYSDATE- :NEW.data_angajare)/365 > 10
- THEN RAISE_APPLICATION_ERROR(-20002, 'Angajatul are o vechime mai mare de 20 de ani!');
- END IF;
- END;
- UPDATE angajati
- SET salariul = salariul-100
- WHERE id_angajat = 100;
- --construiti un trigger prin care: in momentul modificarii functiei unui angajat se va adauga automat o inregistrare niua in tabela istoric_functii
- --daca angajatul nu si-a mai schimbat functia anterior, data de inceput pt. functia noua va fi data angajarii, iar cea de sfarsit, data curenta
- --daca angajatul si-a mai schimbat functia in trecut, data de inceput va fi ultima data de sfarsit pentru o functie detinuta anterior
- --in momentul stergerii unui angajat, se vor sterge toate referirile despre angajat din tabela istoric functii
- CREATE OR REPLACE TRIGGER update_istoric_functii
- AFTER UPDATE OF id_functie OR DELETE ON angajati
- FOR EACH ROW
- DECLARE
- nr NUMBER;
- BEGIN
- SELECT COUNT(id_angajat) INTO nr FROM istoric_functii WHERE id_angajat = :NEW.id_angajat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement