Veja a seguir um exemplo do Oracle BEFORE INSERT OR UPDATE Trigger para realizar validações ao inserir ou atualizar os registros na tabela EMP.
Oracle ANTES DE INSERIR OU ATUALIZAR Exemplo de gatilho
O gatilho abaixo fará as duas verificações a seguir na tabela EMP. (1) Se inserir os registros, verificará se a coluna de comissão não deve ser superior a 500. (2) Se estiver atualizando, verificará que a coluna JOB não deve ser definida como nula.
CREATE OR REPLACE TRIGGER TRIG_EMP_BEF_UPD_INS BEFORE INSERT OR UPDATE ON EMP FOR EACH ROW BEGIN IF INSERTING THEN /* commission should not be greater than 500, for new record*/ IF :new.comm > 500 THEN raise_application_error ( -20001, 'Commission should not be greater than 500.'); END IF; ELSIF UPDATING THEN /* check for column JOB should not be set as null while update*/ IF :new.job IS NULL THEN raise_application_error (-20001, 'Column JOB should have a value.'); END IF; END IF; END;
Teste acima do gatilho para inserir declaração
Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7399, 'A.SMITH', 'CLERK', 7902, TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 550, 20);
Saída
Error at line 1 ORA-20001: Commission should not be greater than 500. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 6 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 1.
Teste acima do gatilho para declaração de atualização
UPDATE EMP SET sal = 900, job = NULL WHERE empno = 7499;
Saída
Error at line 2 ORA-20001: Column JOB should have a value. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 12 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 2.
Você pode testar esse gatilho em seu esquema, baixando as tabelas de demonstração do link a seguir Baixar script Scott Schema.
Veja também:
- Como usar tabelas temporárias globais no procedimento Oracle?
- Oracle Trigger com exemplo de cláusula WHEN
- Tipo de tabela no exemplo de procedimento Oracle