Skip to content

Instantly share code, notes, and snippets.

@aliasbind
Created December 14, 2011 13:08
Show Gist options
  • Save aliasbind/1476501 to your computer and use it in GitHub Desktop.
Save aliasbind/1476501 to your computer and use it in GitHub Desktop.
--3. Să se creeze un trigger care să permită ca numai salariaţii având codul job-ului AD_PRES sau
--AD_VP să poată câştiga mai mult de 15000.
--Obs: Trigger-ul se declanşează de un număr de ori = nr de înregistrări inserate sau al căror câmp
--salary este modificat (deci are legătură cu datele din tabel) => este un trigger la nivel de linie.
create or replace trigger salary_limit
before insert or update on emp
for each row
begin
if :new.job_id != 'AD_PRES' and :new.job_id != 'AD_VP' then
if :new.salary > 15000 then
raise_application_error(-20345, 'Salariul este prea mare.');
end if;
end if;
end;
-- 4. Să se implementeze cu ajutorul unui declanşator constrângerea că valorile salariilor nu pot fi
-- reduse (trei variante: WHEN, IF, PROCEDURE). După testare, suprimaţi trigger-ii creaţi.
create or replace trigger salary_dont_reduce
before insert or update on emp
for each row
begin
if :new.salary < :old.salary then
raise_application_error(-20345, 'Nu este voie sa se scada salariul vreunui angajat.');
end if;
end;
-- 5. Să se creeze un trigger care calculează comisionul unui angajat ‘SA_REP’ atunci când este
-- adăugată o linie tabelului emp sau când este modificat salariul.
-- Obs: Dacă se doreşte atribuirea de valori coloanelor utilizând NEW, trebuie creaţi triggeri
-- BEFORE ROW. Dacă se încearcă scrierea unui trigger AFTER ROW, atunci se va obţine o eroare
-- la compilare.
-- 6. Să se implementeze cu ajutorul unui declanşator constrângerea că, dacă salariul minim şi cel
-- maxim al unui job s-ar modifica, orice angajat având job-ul respectiv trebuie să aibă salariul
-- între noile limite (RAISE eroare; EXCEPTION).
create or replace trigger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment