sql >> Base de Datos >  >> RDS >> Oracle

Ejemplo de activación de Oracle Before Insert OR Update

El siguiente es un ejemplo de activación de Oracle ANTES DE INSERTAR O ACTUALIZAR para realizar validaciones al insertar o actualizar los registros en la tabla EMP.

Oracle ANTES DE INSERTAR O ACTUALIZAR Ejemplo de activación

El disparador a continuación hará las siguientes dos comprobaciones en la tabla EMP. (1) Si inserta los registros, verificará que la columna de comisión no sea superior a 500. (2) Si se actualiza, verificará que la columna TRABAJO no se establezca 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;

Prueba por encima del disparador para la declaración de inserción

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);

Salida

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.

Prueba por encima del disparador para declaración de actualización

UPDATE EMP
SET sal = 900, job = NULL
WHERE empno = 7499;

Salida

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.

Puede probar este disparador en su esquema descargando las tablas de demostración desde el siguiente enlace Descargar secuencia de comandos de Scott Schema.

Ver también:

  • ¿Cómo usar tablas temporales globales en el procedimiento de Oracle?
  • Oracle Trigger con ejemplo de cláusula WHEN
  • Tipo de tabla en el ejemplo de procedimiento de Oracle