Está en la página 1de 6

Disparador de Oracle

Resumen: en este tutorial, aprenderá sobre otro bloque PL / SQL denominado


disparador de Oracle. También aprenderá sobre los diferentes caracteres de los
desencadenantes y su uso en la base de datos.

¿Qué es un disparador de Oracle?


Un desencadenante es un bloque PL / SQL con nombre almacenado en la base de
datos de Oracle y se ejecuta automáticamente cuando se produce un evento
desencadenante. El evento puede ser cualquiera de los siguientes:

 A (DML) de lenguaje de manipulación de datos ejecutada en una mesa, por


ejemplo, INSERT, UPDATE, o DELETE. Por ejemplo, si define un activador que
se activa antes de una INSERT declaración en la customers tabla, el activador se
activará una vez antes de que se inserte una nueva fila en la customers tabla.
 Una declaración de lenguaje de definición de datos (DDL) se ejecuta, por
ejemplo, CREATE o ALTER declaración. Estos desencadenantes se utilizan a
menudo con fines de auditoría para registrar cambios del esquema.
 Un evento del sistema, como el inicio o el cierre de la base de datos Oracle.
 Un evento de usuario como inicio de sesión o cierre de sesión.

El acto de ejecutar un gatillo también se conoce como disparar un gatillo. Decimos


que el gatillo está disparado.

Usos de disparador de Oracle


Los disparadores de Oracle son útiles en muchos casos, como los siguientes:

 La aplicación de reglas de negocio complejas que no se pueden establecer


usando restricción de integridad, tales como UNIQUE, NOT NULL, y CHECK.
 Prevención de transacciones inválidas.
 Recopilación de información estadística sobre accesos a tablas.
 Generando valor automáticamente para columnas derivadas.
 Auditoría de datos sensibles.
Cómo crear un disparador en Oracle
Para crear un nuevo disparador en Oracle, utilice la siguiente CREATE TRIGGER
declaración:

CREATE [OR REPLACE] TRIGGER trigger_name


{BEFORE | AFTER } triggering_event ON table_name
[FOR EACH ROW]
[FOLLOWS | PRECEDES another_trigger]
[ENABLE / DISABLE ]
[WHEN condition]
DECLARE
declaration statements
BEGIN
executable statements
EXCEPTION
exception_handling statements
END;

Examinemos la sintaxis de la CREATE TRIGGER declaración con más detalle.Un


disparador tiene dos partes principales: encabezado y cuerpo. A continuación, se
ilustra el encabezado del disparador:

CREATE [OR REPLACE] TRIGGER trigger_name


{BEFORE | AFTER } triggering_event ON table_name
[FOR EACH ROW]
[FOLLOWS | PRECEDES another_trigger]
[ENABLE / DISABLE ]
[WHEN condition]

Y este es el cuerpo del disparador:

DECLARE
Declaration statements
BEGIN
executable statements
EXCEPTION
exception_handling statements
END;
Como puede ver, el cuerpo del disparador tiene la misma estructura que un bloque
PL / SQL anónimo .

1) CREATE OR REPLACE

La CREATE palabra clave especifica que está creando un nuevo activador. Las OR


REPLACE palabras clave son opcionales. Se utilizan para modificar un disparador
existente.

Aunque las OR REPLACE palabras clave son opcionales, aparecen con la CREATE
palabra clave en la mayoría de los casos.

Por ejemplo, si hoy define un nuevo disparador llamado trigger_example:

CREATE TRIGGER trigger_example


...

Y al día siguiente, decide modificar este disparador.

Si no incluye las OR REPLACE palabras clave, recibirá un mensaje de error que indica
que el nombre de su activador ya está siendo utilizado por otro objeto:

CREATE TRIGGER trigger_example


...

Por lo tanto, las CREATE OR REPLACE palabras clave reemplazarán un activador


existente si ya existe y crearán un activador nuevo si el activador no:

CREATE OR REPLACE trigger_example


....

2) Nombre del disparador

Especifique el nombre del activador que desea crear después de las CREATE OR


REPLACE palabras clave.

3) BEFORE|AFTER

El BEFORE o AFTER opción especifica cuando se dispara el gatillo, ya sea antes o


después de un evento de activación, por ejemplo, INSERT, UPDATE, o DELETE
4) ON table_name

El table_name es el nombre de la tabla asociada con el gatillo.

5) FOR EACH ROW

La cláusula FOR EACH ROW especifica que el disparador es un disparador de


nivel de fila. Un desencadenador de nivel de fila se activa una vez por cada fila
insertada, actualizada o eliminada.

Además de los disparadores de nivel de fila, tenemos disparadores de nivel de


instrucción. Un disparador de declaración se dispara una vez, independientemente
del número de filas afectadas por el evento disparador. Si omite la FOR EACH
ROW cláusula, la CREATE TRIGGER declaración creará un desencadenante a nivel
de declaración.

6) ENABLE/DISABLE

La opción ENABLE/ DISABLE especifica si el disparador se crea en el


estado habilitado o deshabilitado. Tenga en cuenta que, si un disparador está
deshabilitado, no se dispara cuando ocurre el evento disparador.

De forma predeterminada, si no especifica la cláusula ENABLE/ DISABLE, el


disparador se crea con el estado habilitado.

7) FOLLOWS|PRECEDES another_trigger

Para cada evento de activación, por ejemplo, INSERT, UPDATE, o DELETE, puede


definir múltiples disparadores de fuego. En este caso, debe especificar la secuencia
de disparo con la opción FOLLOWS o PRECEDES.

Creemos un disparador para ver cómo funciona.

Creación de un ejemplo de disparador de Oracle


Supongamos que queremos registrar acciones en la customers tabla cada vez que se
actualiza o elimina un cliente. Para hacer esto:

Primero, cree una nueva tabla para registrar los eventos UPDATE y DELETE:


CREATE TABLE audits (
audit_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
table_name VARCHAR2(255),
transaction_name VARCHAR2(10),
by_user VARCHAR2(30),
transaction_date DATE
);

En segundo lugar, cree un nuevo disparador asociado con la customerstabla:

CREATE OR REPLACE TRIGGER customers_audit_trg


AFTER
UPDATE OR DELETE
ON customers
FOR EACH ROW
DECLARE
l_transaction VARCHAR2(10);
BEGIN
-- determine the transaction type
l_transaction := CASE
WHEN UPDATING THEN 'UPDATE'
WHEN DELETING THEN 'DELETE'
END;

-- insert a row into the audit table


INSERT INTO audits (table_name, transaction_name, by_user, transaction_date)
VALUES('CUSTOMERS', l_transaction, USER, SYSDATE);
END;
/

La siguiente cláusula:

AFTER UPDATE OR DELETE ON customers

activará el disparador después de que customers se actualice o elimine una fila de la


tabla.

Dentro del disparador, determinamos la acción actual si es UPDATE o DELETE e


insertamos una fila en la audits tabla.
La siguiente declaración actualiza el límite de crédito del cliente de 10 a 2000.

UPDATE
customers
SET
credit_limit = 2000
WHERE
customer_id =10;

Ahora, verifique el contenido de la tabla audits para ver si se disparó el disparador:

SELECT * FROM audits;

Aquí está el resultado:

Como puede ver claramente en la salida, el disparador customers_audit_trg se disparó


para que tengamos una nueva fila insertada en la audits tabla.

Esta DELETE declaración elimina una fila de la customers tabla.

DELETE FROM customers


WHERE customer_id = 10;

Y ver los datos de la audits tabla:

SELECT * FROM audits;

El resultado mostró que se ha insertado una nueva fila. Significa que la DELETE


acción disparó el gatillo customer_audit_trg.

En este tutorial, ha aprendido sobre los disparadores de Oracle y cómo crear


nuevos disparadores usando la CREATE TRIGGER declaración.

También podría gustarte