Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Exemplo de gatilho Oracle antes de inserir OU atualizar


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