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:

  1. Triggers DML: S'activen en resposta a operacions DML (INSERT, UPDATE, DELETE).
  2. Triggers DDL: S'activen en resposta a operacions DDL (CREATE, ALTER, DROP).
  3. 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 columna salary de la taula employees.
  • 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:

UPDATE employees
SET salary = salary * 1.1
WHERE employee_id = 101;

Després d'executar aquesta sentència, podem verificar la taula salary_audit per veure el registre de l'actualització:

SELECT * FROM salary_audit;

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.

© Copyright 2024. Tots els drets reservats