PLSQL - Disparadores y Triggers
PLSQL - Disparadores y Triggers
PLSQL - Disparadores y Triggers
com/plsql-disparadores-o-triggers/
El Baúl
Autor
Alejandro Alcalde
Índice
Introducción
Los disparadores (o triggers) son bloques de código PL/SQL asociados a una tabla y
que se ejecutan automáticamente como reacción a una operación DML específica
(INSERT, UPDATE o DELETE) sobre dicha tabla.
1 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
[BEFORE|AFTER]
El Baúl
[DELETE|INSERT|UPDATE {OF columnas}] [ OR [DELETE|INSERT|UPDATE {OF column
ON tabla
[FOR EACH ROW [WHEN condicion disparo]]
[DECLARE]
‐‐ Declaración de variables locales
BEGIN
‐‐ Instrucciones de ejecución
[EXCEPTION]
‐‐ Instrucciones de excepción
END;
En principio, dentro del cuerpo de programa del trigger podemos hacer uso de
cualquier orden de consulta o manipulación de la BD, y llamadas a funciones o
procedimientos siempre que:
No se acceda a las tablas que están siendo modificadas con DELETE, INSERT o
UPDATE en la misma sesión
Predicados condicionales
Cuando se crea un trigger para más de una operación DML, se puede utilizar un
2 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
predicado condicional en las sentencias que componen el trigger que indique que
Eltipo
Baúl
de operación o sentencia ha disparado el trigger. Estos predicados condicionales
son los siguientes:
Tipos de triggers
3 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
Los triggers pueden definirse para las operaciones INSERT, DELETE o Update, y
Elpueden
Baúl dispararse antes o después de la operación. Finalmente, el nivel de los
disparadores puede ser la fila o registro o la orden.
Tipos de disparadores.
INSERT,
Define que tipo de operación DML provoca laactivación del
Orden DELETE,
trigger
UPDATE
Los disparadores con nivel de fila se activan unavez por cada fila
afectada por la orden que provocóel disparo. Los Triggers con
Fila u
Nivel nivel de orden seactivan sólo una vez, antes o después de la
Orden
orden.Los disparadores con nivel de fila se identificanpor la
cláusula FOR EACH ROW en la definicióndel disparador.
4 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
El Baúl
Si existe, se ejecuta el disparador de tipo BEFORE (disparador previo) con nivel de
orden.
Por las mismas razones, ningún procedure o función llamado por el disparador puede
emitir órdenes de control de transacciones.
5 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
Un disparador con nivel de fila se ejecuta una vez por cada fila procesada por la
Elorden
Baúl que provoca el disparo. Dentro del disparador, puede accederse a la fila que
está siendo actualmente procesada utilizando, para ello, dos pseudo-registros, :old
y :new.
Orden de
:old :new
Disparo
Ejemplo:
6 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
END IF;
El Baúl
/*If the current time is before 8:00AM or after
6:00PM, then return an error. */
La cláusula WHEN
La cláusula WHEN sólo es válida para disparadores con nivel de fila. Si está presente,
el cuerpo del disparador sólo se ejecutará para las filas que cumplan la condición
especificada en la cláusula.
Para hacer que un trigger ejecute un ROLLBACK de la transacción que tiene activa y
teniendo en cuenta que en las sentencias que componen el cuerpo de un trigger no
puede haber este tipo de sentencias (rollback, commit,…) hay que ejecutar “error /
excepcion” mediante la sentencia raise_application_error cuya sintaxis es:
7 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
RAISE_APPLICATION_ERROR(num_error,’mensaje’);
El Baúl
El num_error es un número entero cualquiera, aunque se aconseja que tenga 5
dígitos.
Tabla Mutando
Cuando se realiza un trigger sobre una tabla, dicha tabla se dice que está en
“proceso de mutación”, es decir, que se están realizando cambios sobre ella y que
por tanto dentro del trigger no se debe hacer ningún tipo de acceso a dicha tabla
con operaciones DML (SELECT, INSERT, DELETE o UPDATE).
Si queremos conocer los valores del registro de la tabla sobre la que se ha disparado
el trigger, este último debe estar declarado de forma FOR EACH ROW y acceder a sus
valores mediante las pseudocolumnas :NEW y :OLD.
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo
o comentando abajo.
Compártelo Suscríbete
Categorías:
basededatos
Etiquetas:
8 de 9 08-02-2024, 13:06
PL/SQL. Disparadores o Triggers https://elbauldelprogramador.com/plsql-disparadores-o-triggers/
sql pl/sql
El Baúl
Quizá también te interese leer...
Introducción SQL
PL/SQL. Cursores
9 de 9 08-02-2024, 13:06