Está en la página 1de 10

Introducción al Modelado Conceptual 29/11/2012

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

Triggers en Oracle
4. Activación
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


noviembre 2012

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
5. Documentación
6. Ejercicios
las 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
Introducción al Modelado Conceptual 29/11/2012

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

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


las tablas sobre las que están definidos

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


de Ingeniería Informática

las que cabe destacar:


Departamento de Lenguajes
y Sistemas Informáticos

1. Introducción
2. Creación de
triggers
• Forzar reglas de integridad que son difíciles de
3. Expresiones
4. Activación
definir 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
Introducción al Modelado Conceptual 29/11/2012

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
1. Introducción
2. Creación de
contrato: 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:
– CREATE OR REPLACE TRIGGER
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos

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
© Diseño de Amador Durán Toro, 2011

PL/SQL, la 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
Introducción al Modelado Conceptual 29/11/2012

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
Escuela Técnica Superior
de Ingeniería Informática de una fila de la tabla, se utilizan los prefijos :OLD y :NEW
Departamento de Lenguajes
y Sistemas Informáticos

1. Introducción
2. Creación de
• Cuando estamos haciendo una modificación (UPDATE) de
triggers
una fila podemos referirnos al valor antes de ser
3. Expresiones
4. Activación modificado (:OLD) y al valor después de la modificación
5. Documentació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
Introducción al Modelado Conceptual 29/11/2012

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).
• Cuando está desactivado no ejecuta ninguna
1. Introducción
2. Creación de
triggers
3. Expresiones acción.
4. Activación

• Hay dos comandos SQL para activar un trigger :


5. Documentación
6. Ejercicios

– 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
Introducción al Modelado Conceptual 29/11/2012

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(4) PRIMARY KEY,
nomemp varchar2(15),
mgr char(4),
salario integer DEFAULT 1000,
usuario varchar2(15),
fecha date );

ALTER TABLE EMP ADD(


FOREIGN KEY (mgr) 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 EMP para que no se
1. Introducción
2. Creación de
permita que un empleado sea jefe (MGR) de más
triggers
3. Expresiones de cinco 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 mgr = :new.mgr;
IF (supervisa > 4)
THEN raise_application_error
(-20600,:new.mgr||'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
Introducción al Modelado Conceptual 29/11/2012

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
1. Introducción
2. Creación de
salario 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
6. Ejercicios
salario (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
CREATE OR REPLACE TRIGGER aumentoSalario
2. Creación de
triggers BEFORE UPDATE OF salario ON empleados
3. Expresiones FOR EACH ROW
4. Activación BEGIN
5. Documentación IF :NEW.salario > :OLD.salario*1.20
6. Ejercicios 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
Introducción al Modelado Conceptual 29/11/2012

Ejercicios

• Ejercicio 3.
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes • Crear una tabla empleados_baja con la siguiente
y Sistemas Informáticos
estructura: CREATE TABLE empleados_baja
1. Introducción
(dni char(4) PRIMARY KEY,
2. Creación de
triggers nomemp varchar2(15),
3. Expresiones mng char(4),
4. Activación salario integer,
5. Documentación usuario varchar2(15),
6. Ejercicios
fecha date );

• Crear un trigger que inserte una fila en la tabla


empleados_baja cuando se borre una fila en la tabla
empleados.
• Los datos que se insertan son los correspondientes al
empleado que se da de baja en la tabla empleados,
salvo en las columnas usuario y fecha se grabarán las
variables del sistema USER y SYSDATE que almacenan

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


el usuario y fecha actual.
• El comando que dispara el trigger es AFTER DELETE.
noviembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 14

Ejercicios

Escuela Técnica Superior


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

1. Introducción CREATE OR REPLACE TRIGGER bajas


2. Creación de AFTER DELETE ON empleados
triggers
FOR EACH ROW
3. Expresiones
4. Activación
BEGIN
5. Documentación
6. Ejercicios INSERT INTO empleados_baja VALUES
(:old.dni,:old.nomemp,:old.mgr, :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
Introducción al Modelado Conceptual 29/11/2012

Ejercicios

• Ejercicio 4.
Escuela Técnica Superior
de Ingeniería Informática
Departamento de Lenguajes
– Modificar la tabla empleados añadiendo el campo
y Sistemas Informáticos
departamento (integer) (ALTER TABLE …).
1. Introducción
2. Creación de • Crear un trigger para impedir que el salario total por
triggers
3. Expresiones departamento (suma de los salarios de los
4. Activación
5. Documentación
empleados por departamento) sea superior a 10.000.
6. Ejercicios
• Ayuda:
– Será necesario distinguir si se trata de una
modificación o de una inserción.
– Cuando se trate de una inserción (IF INSERTING...) se
comprobará que el salario del empleado a insertar
(:NEW.salario) más el salario total del departamento
al que pertenece dicho empleado no es superior a
10.0000.
– Cuando se trate de una modificación (IF

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


UPDATING...), al salario total del departamento se le
sumará el :NEW.salario y se le restará el :OLD.salario.

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

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 un
1. Introducción
2. Creación de
triggers
empleado y su jefe pertenezcan a
3. Expresiones
4. Activación departamentos distintos.
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 17

IISSI 9
Introducción al Modelado Conceptual 29/11/2012

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
3. Expresiones
'empleados';
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 18

Ejercicios

Escuela Técnica Superior


de Ingeniería Informática
Departamento de Lenguajes
CREATE OR REPLACE TRIGGER sumaDept
y Sistemas Informáticos BEFORE
1. Introducción
INSERT OR UPDATE ON emp
2. Creación de FOR EACH ROW
triggers DECLARE
3. Expresiones sumaSalarios INTEGER;
4. Activación
BEGIN
5. Documentación
SELECT sum(sal) INTO sumaSalarios
6. Ejercicios
FROM emp WHERE sal = :new.sal group by deptno;

IF (inserting and sumaSalarios > 10000)


THEN raise_application_error (-20600,:new.deptno||'no
pueden cobrar más de 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

También podría gustarte