Trigger de atualização PL / SQL Oracle
Eu tenho uma tabela com a seguinte estrutura:
create table treballa (
code varchar2(4),
name varchar2(20),
director varchar2(4),
department number,
salary int,
primary key (code),
foreign key (director) references treballa(code)
)
E preciso criar um gatilho que verifique se o número do departamento do trabalhador atualizado, o salário total entre todos os trabalhadores desse departamento não excede 10000, mas não sei como fazê-lo realmente ... por favor me ajude? Muito obrigado.
EDITAR:
CREATE OR REPLACE TRIGGER controlsalaridept BEFORE INSERT OR UPDATE ON TREBALLA
FOR EACH ROW
DECLARE
salaritotal INT := 0;
BEGIN
IF INSERTING THEN
SELECT sum(salary) INTO salaritotal FROM TREBALLA WHERE DEPARTMENT LIKE :new.DEPARTAMENT;
DBMS_OUTPUT.PUT_LINE('Salari Total abans suma:'||salaritotal);
salaritotal := salaritotal + :new.SALARY;
DBMS_OUTPUT.PUT_LINE('Salari Total després:'||salaritotal);
IF salaritotal > 10000 THEN
raise_application_error(-20025, 'La suma del salari total de cada departament supera els 10000 Euros');
END IF;
END IF;
IF UPDATING THEN
SELECT sum(salary) INTO salaritotal FROM TREBALLA WHERE DEPARTMENT LIKE :old.DEPARTAMENT;
DBMS_OUTPUT.PUT_LINE('Salari Total abans suma:'||salaritotal);
salaritotal := salaritotal - :old.SALARY + :new.SALARY;
DBMS_OUTPUT.PUT_LINE('Salari Total després:'||salaritotal);
IF salaritotal > 10000 THEN
raise_application_error(-20026,'La suma del salari total de cada departament supera els 10000 Euros');
END IF;
END IF;
END;
END EDIT /
ERRO AO ATUALIZAR:
[42000] [4091] ORA-04091: tabela SPECIAL.TREBALLA está em mutação, gatilho / função pode não vê-lo ORA-06512: em "SPECIAL.CONTROLSALARIDEPT", linha 14 ORA-04088: erro durante a execução do gatilho 'SPECIAL.CONTROLSALARIDEPT "
PD: Desculpe, eu sou muito novo no oracle e preciso de ajuda com esse gatilho, não sei se está certo o que estou fazendo .... A primeira parte do gatilho "SE INSERIR" funciona bem, o problema está com a atualização ...