Sei sulla pagina 1di 11

Triggers 24/12/2016

Escuela Técnica Superior


Escuela Técnica Superior
de Ingeniería Informática
de Ingeniería Informática
Departamento de Lenguajes
Departamento de Lenguajes
y Sistemas Informáticos
y Sistemas Informáticos

1. Introducción
2. Creación de
triggers
3. Expresiones
4. Activación

Triggers en Oracle
5. Documentación
6. Ejercicios

Grupo de Ingeniería del Software y Bases de Datos


Departamento de Lenguajes y Sistemas Informáticos
Universidad de Sevilla

© Diseño de Amador Durán Toro, 2011


Diciembre 2016

Introducción

Escuela Técnica Superior • Objetivos de la práctica


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Conocer qué son los triggers y para qué se utilizan
1. Introducción
2. Creación de – Aprender a construir triggers
triggers
3. Expresiones
4. Activación
– Consultar cómo están almacenados y cómo se ven las
5. Documentación
6. Ejercicios
propiedades de los triggers
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 1

IISSI 1
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior


de Ingeniería Informática
• Trigger, o disparador, es un objeto
Departamento de Lenguajes
y Sistemas Informáticos
procedimental asociado a una tabla.
1. Introducción
2. Creación de
triggers
• Está construido por bloques PL/SQL y sentencias
3. Expresiones
4. Activación
SQL.
5. Documentación
6. Ejercicios • Se ejecuta cuando se pretende realizar una
determinada instrucción SQL sobre dicha tabla.
• Los Triggers frente a las Restricciones de
Integridad, no se aplican a los datos almacenados
en la base de datos antes de su definición; sólo se
aplican cuando, una vez creados, se ejecutan
comandos que manipulan las tablas sobre las que
están definidos

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 2

Ejercicios

Escuela Técnica Superior • Un trigger tiene muchas aplicaciones entre las


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos que cabe destacar:
1. Introducción
2. Creación de
triggers
3. Expresiones
• Forzar reglas de integridad que son difíciles de definir
4. Activación
mediante constraints.
5. Documentación
6. Ejercicios
• Realizar cambios en la base de datos de forma
transparente al usuario.

• Sincronización entre tablas generando


automáticamente valores de columnas derivadas en
base a un valor proporcionado por una sentencia
INSERT o UPDATE.

• Derivar valores de columna automáticamente, etc..


© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 3

IISSI 2
Triggers 24/12/2016

Introducción

Escuela Técnica Superior • Ejemplos:


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Campo autocalcualdo con la duración de un contrato:
1. Introducción
2. Creación de
Fecha Fin – Fecha Inicio
triggers
3. Expresiones – Campo autocalculado con la cuantía de la Señal:
4. Activación
5. Documentación PrecioAlquiler*2
6. Ejercicios

– Validación de campos: La comisión del empleado debe


estar entre el 50% y el 30% del valor del alquiler

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 4

Creación de Triggers

Escuela Técnica Superior


Para definir los triggers se utiliza el comando SQL:
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
– CREATE OR REPLACE TRIGGER
1. Introducción
2. Creación de
triggers
3. Expresiones
La definición de un trigger tiene tres partes:
4. Activación – Comando:
5. Documentación
6. Ejercicios • Se especifica el comando DML de SQL que dispara el Trigger
(Delete, Insert o Update), y la tabla asociada.
• Se puede especificar cuándo se dispara el Trigger:
– BEFORE, antes de ejecutar el comando,
– AFTER, después de ejecutar el comando.
– Restricción:
• Se define la condición que tiene que verificar cada fila de la
tabla para que se ejecute la acción del trigger
– Acción:
• Se define mediante comandos y sentencias SQL y PL/SQL, la
© Diseño de Amador Durán Toro, 2011

tarea específica que realiza el Trigger.

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 5

IISSI 3
Triggers 24/12/2016

Sintaxis de triggers

Escuela Técnica Superior • Sintaxis de triggers:


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos

1. Introducción
2. Creación de CREATE [OR REPLACE] TRIGGER <nombre_trigger>
triggers
3. Expresiones
4. Activación
{BEFORE|AFTER}
5. Documentación
6. Ejercicios {DELETE|INSERT|UPDATE [OF <col1>, ..., <colN>]
[OR
{DELETE|INSERT|UPDATE [OF <col1>, .., <colN>]]}
ON table <nombre_tabla>
[FOR EACH ROW [WHEN (<condicion>)]]

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 6

Expresiones

• Para referirse al valor nuevo y al antiguo de una columna de


Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
una fila de la tabla, se utilizan los prefijos :OLD y :NEW
y Sistemas Informáticos

1. Introducción
2. Creación de
triggers
• Cuando estamos haciendo una modificación (UPDATE) de
3. Expresiones una fila podemos referirnos al valor antes de ser modificado
4. Activación
5. Documentación (:OLD) y al valor después de la modificación (:NEW).
6. Ejercicios

• Al introducir valores nuevos (INSERT) podemos referenciar


sólo el valor nuevo (:NEW).

• Al borrar (DELETE) podemos referenciar sólo el valor


antiguo (:OLD).

• Ejemplo. Compara si el salario ha aumentado en más del


25% de salario antiguo:
© Diseño de Amador Durán Toro, 2011

:NEW.salario > (:OLD.salario*1.25)


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 7

IISSI 4
Triggers 24/12/2016

Activación de triggers

Escuela Técnica Superior • Un trigger puede estar activado (ENABLE) o


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos desactivado (DISABLE).
1. Introducción
2. Creación de
triggers
• Cuando está desactivado no ejecuta ninguna
3. Expresiones
4. Activación acción.
5. Documentación
6. Ejercicios
• Hay dos comandos SQL para activar un trigger :
– ALTER TRIGGER nombre_trigger {ENABLE|DISABLE};
– ALTER TABLE nombre_tabla {ENABLE|DISABLE} ALL
TRIGGERS;

• Cuando se crean están activos por defecto.


• Es conveniente desactivar los triggers sobre una
tabla cuando se hace una carga masiva de datos.

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 8

Documentación de triggers

Escuela Técnica Superior • Documentación de triggers.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Se pueden consultar las vistas:
1. Introducción
2. Creación de • USER_TRIGGERS
triggers
3. Expresiones • ALL_TRIGGERS
4. Activación
5. Documentación • DBA_TRIGGERS
6. Ejercicios
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 9

IISSI 5
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior • Crear una tabla EMPLEADOS.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos

1. Introducción
2. Creación de
triggers
3. Expresiones
4. Activación
CREATE TABLE empleados
5. Documentación
6. Ejercicios
(dni char(9) PRIMARY KEY,
nomemp varchar2(50),
jefe char(9),
departamento integer,
salario number(9,2) DEFAULT 1000,
usuario varchar2(50),
fecha date,
FOREIGN KEY (jefe) REFERENCES empleados (dni)
);

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 10

Ejercicios

Escuela Técnica Superior Ejercicio 1.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Crear un trigger sobre la tabla EMPLEADOS para que no
1. Introducción
2. Creación de
se permita que un empleado sea jefe de más de cinco
triggers
3. Expresiones empleados.
4. Activación
5. Documentación
6. Ejercicios CREATE OR REPLACE TRIGGER jefes
BEFORE
INSERT ON empleados
FOR EACH ROW
DECLARE
supervisa INTEGER;
BEGIN
SELECT count(*) INTO supervisa
FROM empleados WHERE jefe = :new.jefe;
IF (supervisa > 4)
THEN raise_application_error
(-20600,:new.jefe||'no se puede supervisar más de 5');
END IF;
END; Inserte las tuplas
© Diseño de Amador Durán Toro, 2011

necesarias para
comprobar que
funcional el trigger

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 11

IISSI 6
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior Ejercicio 2.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Crear un trigger para impedir que se aumente el salario
1. Introducción
2. Creación de
de un empleado en más de un 20%.
triggers
3. Expresiones • Es necesario comparar los valores :old.salario y
4. Activación
5. Documentación :new.salario cada vez que se modifica el atributo salario
6. Ejercicios
(BEFORE UPDATE).

IF :NEW.salario > :OLD.salario*1.20


THEN raise…

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 12

Ejercicios

Escuela Técnica Superior


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos

1. Introducción
2. Creación de
triggers CREATE OR REPLACE TRIGGER aumentoSalario
3. Expresiones
BEFORE UPDATE OF salario ON empleados
4. Activación
FOR EACH ROW
5. Documentación
6. Ejercicios
BEGIN
IF :NEW.salario > :OLD.salario*1.20
THEN raise_application_error
(-20600,:new.Salario||'no se puede aumentar el
salario más de un 20%');
END IF;
END;

Inserte las tuplas


necesarias para
comprobar que
funcional el trigger
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 13

IISSI 7
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior Ejercicio 3.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Crear una tabla empleados_baja con la siguiente
1. Introducción
2. Creación de
estructura:
triggers
3. Expresiones
4. Activación
5. Documentación
CREATE TABLE empleados_baja (
6. Ejercicios
dni char(9) PRIMARY KEY,
nomemp varchar2(50),
jefe char(9),
departamento integer,
salario number(9,2) DEFAULT 1000,
usuario varchar2(50),
fecha date
);

– Crear un trigger que inserte una fila en la tabla


empleados_baja cuando se borre una fila en la tabla
empleados.

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 14

Ejercicios

Escuela Técnica Superior


– Los datos que se insertan son los del empleado que se
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
da de baja en la tabla empleados, salvo en las columnas
1. Introducción usuario y fecha se grabarán las variables del sistema
2. Creación de
triggers USER y SYSDATE que almacenan el usuario y fecha
3. Expresiones
4. Activación actual.
5. Documentación
6. Ejercicios
– El comando que dispara el trigger es AFTER DELETE.

CREATE OR REPLACE TRIGGER bajas


AFTER DELETE ON empleados
FOR EACH ROW
BEGIN

INSERT INTO empleados_baja VALUES


(:old.dni,:old.nomemp,:old.jefe,:old.departamento,
:old.salario, USER, SYSDATE);
END;
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 15

IISSI 8
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior Ejercicio 4.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Crear un trigger para impedir que, al insertar un
1. Introducción
2. Creación de
empleado, el empleado y su jefe puedan pertenecer a
triggers
3. Expresiones departamentos distintos.
4. Activación
5. Documentación
6. Ejercicios

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 16

Ejercicios

Escuela Técnica Superior


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos
CREATE OR REPLACE TRIGGER MISMO_DEP
1. Introducción
2. Creación de
BEFORE INSERT ON EMPLEADOS
triggers FOR EACH ROW
3. Expresiones
DECLARE
4. Activación
5. Documentación
dept_jefe INTEGER;
6. Ejercicios
BEGIN

IF (:NEW.jefe IS NOT NULL) THEN


SELECT departamento INTO dept_jefe FROM empleados WHERE
dni=:NEW.jefe;
IF (dept_jefe <> :NEW.departamento) THEN
raise_application_error
(-20600,:NEW.departamento||' Un empleado y su jefe no pueden
pertenecer a departamentos diferentes');
END IF;
END IF;
END;
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 17

IISSI 9
Triggers 24/12/2016

Ejercicios

Escuela Técnica Superior Ejercicio 5.


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Crear un trigger para impedir que, al insertar un
1. Introducción
2. Creación de
empleado, la suma de los salarios de los empleados
triggers
3. Expresiones pertenecientes al departamento del empleado insertado
4. Activación
5. Documentación supere los 10.000 euros.
6. Ejercicios

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 18

Ejercicios

Escuela Técnica Superior


de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos CREATE OR REPLACE TRIGGER sumaDept
1. Introducción BEFORE
2. Creación de INSERT ON empleados
triggers
3. Expresiones
FOR EACH ROW
4. Activación DECLARE
5. Documentación suma INTEGER;
6. Ejercicios
BEGIN
SELECT SUM(salario) INTO suma FROM empleados
WHERE departamento=:NEW.departamento;

suma := suma + :NEW.salario;

IF (suma > 10000) THEN


raise_application_error
(-20600,:NEW.departamento||' La suma de salarios no puede ser
superior a 10000');
END IF;
END;
© Diseño de Amador Durán Toro, 2011

noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 19

IISSI 10
Triggers 24/12/2016

Ejercicios
Ejercicio 6.
Escuela Técnica Superior
de Ingeniería Informática • Visualizar los trigger definidos sobre una tabla consultando la vista
Departamento de Lenguajes
y Sistemas Informáticos ALL-_TRIGGERS.
1. Introducción – DESC ALL-_TRIGGERS
2. Creación de – SELECT trigger_name, status FROM ALL_TRIGGERS WHERE table_name =
triggers
'empleados';
3. Expresiones
4. Activación
5. Documentación
6. Ejercicios
• Desactivar (DISABLE) y activar (ENABLE) los trigger definidos sobre una tabla:
– ALTER TABLE empleados DISABLE ALL TRIGGERS;

• Activar y desactivar un trigger especifico:


– ALTER TRIGGER jefes DISABLE;

• Ver la descripción de un trigger:


– SELECT description FROM USER_TRIGGERS WHERE trigger_name = 'JEFES';

• Ver el cuerpo de un trigger:


– SELECT trigger_body FROM USER_TRIGGERS WHERE trigger_name = 'JEFES';

© Diseño de Amador Durán Toro, 2011


noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 20

IISSI 11