Els triggers (triggers en anglès) són una característica poderosa de PL/SQL que permet executar codi automàticament en resposta a certs esdeveniments en una base de dades. Els triggers poden ser utilitzats per mantenir la integritat de les dades, auditar canvis, i implementar regles de negoci complexes.
Què és un Trigger?
Un trigger és un bloc de codi PL/SQL que s'executa automàticament quan ocorre un esdeveniment específic en una taula o vista. Els esdeveniments que poden activar un trigger inclouen operacions DML (INSERT, UPDATE, DELETE) i esdeveniments DDL (CREATE, ALTER, DROP).
Tipus de Triggers
Hi ha diversos tipus de triggers en PL/SQL:
- Triggers DML: S'activen en resposta a operacions DML (INSERT, UPDATE, DELETE).
- Triggers DDL: S'activen en resposta a operacions DDL (CREATE, ALTER, DROP).
- Triggers de Base de Dades: S'activen en resposta a esdeveniments de la base de dades com l'inici de sessió d'un usuari o el tancament de la base de dades.
Estructura d'un Trigger
Un trigger DML típic té la següent estructura:
CREATE OR REPLACE TRIGGER trigger_name BEFORE | AFTER INSERT | UPDATE | DELETE ON table_name [FOR EACH ROW] DECLARE -- Declaració de variables locals BEGIN -- Codi PL/SQL a executar END;
BEFORE | AFTER
: Indica si el trigger s'executa abans o després de l'esdeveniment.INSERT | UPDATE | DELETE
: Especifica l'operació DML que activa el trigger.ON table_name
: Especifica la taula o vista sobre la qual s'aplica el trigger.FOR EACH ROW
: Opcional, indica que el trigger s'executa per a cada fila afectada per l'operació DML.
Exemple Pràctic
Crear un Trigger
Suposem que tenim una taula employees
i volem crear un trigger que registri qualsevol canvi en el salari dels empleats en una taula d'auditoria salary_audit
.
-- Creació de la taula d'auditoria CREATE TABLE salary_audit ( employee_id NUMBER, old_salary NUMBER, new_salary NUMBER, change_date DATE ); -- Creació del trigger CREATE OR REPLACE TRIGGER trg_salary_update AFTER UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO salary_audit (employee_id, old_salary, new_salary, change_date) VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE); END;
Explicació del Codi
AFTER UPDATE OF salary ON employees
: El trigger s'activa després d'una operació UPDATE en la columnasalary
de la taulaemployees
.FOR EACH ROW
: El trigger s'executa per a cada fila afectada per l'operació UPDATE.:OLD
i:NEW
: Són pseudorecords que contenen els valors antics i nous de les columnes afectades.
Provar el Trigger
Per provar el trigger, podem fer una actualització en la taula employees
:
Després d'executar aquesta sentència, podem verificar la taula salary_audit
per veure el registre de l'actualització:
Exercicis Pràctics
Exercici 1: Crear un Trigger d'Inserció
Crea un trigger que registri qualsevol nova inserció en la taula employees
en una taula d'auditoria employee_audit
.
Solució
-- Creació de la taula d'auditoria CREATE TABLE employee_audit ( employee_id NUMBER, employee_name VARCHAR2(100), hire_date DATE ); -- Creació del trigger CREATE OR REPLACE TRIGGER trg_employee_insert AFTER INSERT ON employees FOR EACH ROW BEGIN INSERT INTO employee_audit (employee_id, employee_name, hire_date) VALUES (:NEW.employee_id, :NEW.employee_name, :NEW.hire_date); END;
Exercici 2: Crear un Trigger de Supressió
Crea un trigger que registri qualsevol eliminació en la taula employees
en una taula d'auditoria deletion_audit
.
Solució
-- Creació de la taula d'auditoria CREATE TABLE deletion_audit ( employee_id NUMBER, employee_name VARCHAR2(100), deletion_date DATE ); -- Creació del trigger CREATE OR REPLACE TRIGGER trg_employee_delete AFTER DELETE ON employees FOR EACH ROW BEGIN INSERT INTO deletion_audit (employee_id, employee_name, deletion_date) VALUES (:OLD.employee_id, :OLD.employee_name, SYSDATE); END;
Errors Comuns i Consells
- Error: Mutació de la Taula: Un error comú és intentar modificar la mateixa taula que activa el trigger. Això pot causar un error de mutació de la taula. Evita modificar la taula objectiu del trigger dins del mateix trigger.
- Consell: Utilitza Triggers amb Moderació: Els triggers poden complicar el depurament i el manteniment del codi. Utilitza'ls només quan sigui necessari i documenta bé el seu comportament.
Conclusió
Els triggers són una eina poderosa en PL/SQL per automatitzar tasques i mantenir la integritat de les dades. En aquest tema, hem après què són els triggers, com crear-los i com utilitzar-los en situacions pràctiques. Amb aquesta base, estàs preparat per implementar triggers en els teus projectes de PL/SQL i aprofitar al màxim les seves capacitats.
Curs de PL/SQL
Mòdul 1: Introducció a PL/SQL
Mòdul 2: Fonaments de PL/SQL
- Estructura del bloc PL/SQL
- Variables i tipus de dades
- Estructures de control
- Cursors
- Gestió d'excepcions