Sei sulla pagina 1di 10

Introduccin al Modelado Conceptual

29/11/2012

Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

Triggers en Oracle

Grupo de Ingeniera del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informticos noviembre 2012
Diseo de Amador Durn Toro, 2011

Universidad de Sevilla

Introduccin
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Objetivos de la prctica
Conocer qu son los triggers y para qu se utilizan Aprender a construir triggers Consultar cmo estn almacenados y cmo se ven las propiedades de los triggers

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Trigger, o disparador, es un objeto


procedimental asociado a una tabla. Est construido por bloques PL/SQL y sentencias SQL. Se ejecuta cuando se pretende realizar una determinada instruccin 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 definicin; slo se aplican cuando, una vez creados, se ejecutan comandos que manipulan las tablas sobre las que estn definidos

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Un trigger tiene muchas aplicaciones entre las que cabe destacar:


Forzar reglas de integridad que son difciles de definir mediante constraints. Realizar cambios en la base de datos de forma transparente al usuario. Sincronizacin entre tablas generando automticamente valores de columnas derivadas en base a un valor proporcionado por una sentencia INSERT o UPDATE. Derivar valores de columna automticamente, etc..
Diseo de Amador Durn Toro, 2011

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Introduccin
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejemplos:
Campo autocalcualdo con la duracin de un contrato: Fecha Fin Fecha Inicio Campo autocalculado con la cuanta de la Seal: PrecioAlquiler*2 Validacin de campos: La comisin del empleado debe estar entre el 50% y el 30% del valor del alquiler

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Creacin de Triggers
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Para definir los triggers se utiliza el comando SQL:


CREATE OR REPLACE TRIGGER

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

La definicin de un trigger tiene tres partes:


Comando:
Se especifica el comando DML de SQL que dispara el Trigger (Delete, Insert o Update), y la tabla asociada. Se puede especificar cundo se dispara el Trigger:
BEFORE, antes de ejecutar el comando, AFTER, despus de ejecutar el comando.

Restriccin:
Se define la condicin que tiene que verificar cada fila de la tabla para que se ejecute la accin del trigger

Accin:
Diseo de Amador Durn Toro, 2011

Se define mediante comandos y sentencias SQL y PL/SQL, la tarea especfica que realiza el Trigger.

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Sintaxis de triggers
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Sintaxis de triggers:
CREATE [OR REPLACE] TRIGGER <nombre_trigger> {BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF <col1>, ..., <colN>] [OR {DELETE|INSERT|UPDATE [OF <col1>, .., <colN>]]} ON table <nombre_tabla> [FOR EACH ROW [WHEN (<condicion>)]]

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Expresiones

Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Para referirse al valor nuevo y al antiguo de una columna de una fila de la tabla, se utilizan los prefijos :OLD y :NEW Cuando estamos haciendo una modificacin (UPDATE) de una fila podemos referirnos al valor antes de ser modificado (:OLD) y al valor despus de la modificacin (:NEW). Al introducir valores nuevos (INSERT) podemos referenciar slo el valor nuevo (:NEW). Al borrar (DELETE) podemos referenciar slo el valor antiguo (:OLD). Ejemplo. Compara si el salario ha aumentado en ms del 25% de salario antiguo: :NEW.salario > (:OLD.salario*1.25)
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Activacin de triggers
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Un trigger puede estar activado (ENABLE) o desactivado (DISABLE). Cuando est desactivado no ejecuta ninguna accin. Hay dos comandos SQL para activar un trigger :
ALTER TRIGGER nombre_trigger {ENABLE|DISABLE}; ALTER TABLE nombre_tabla {ENABLE|DISABLE} ALL TRIGGERS;

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

Cuando se crean estn activos por defecto. Es conveniente desactivar los triggers sobre una tabla cuando se hace una carga masiva de datos.

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

Documentacin de triggers
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Documentacin de triggers.
Se pueden consultar las vistas:
USER_TRIGGERS ALL_TRIGGERS DBA_TRIGGERS

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Crear una tabla EMPLEADOS.

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

CREATE TABLE empleados (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) );

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

10

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejercicio 1.
Crear un trigger sobre la tabla EMP para que no se permita que un empleado sea jefe (MGR) de ms de cinco empleados.
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 ms de 5'); END IF; END; Inserte las tuplas necesarias para comprobar que funcional el trigger
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin
11

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejercicio 2.
Crear un trigger para impedir que se aumente el salario de un empleado en ms de un 20%.
Es necesario comparar los valores :old.salario y

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

:new.salario cada vez que se modifica el atributo


salario (BEFORE UPDATE).

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

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

12

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

CREATE OR REPLACE TRIGGER aumentoSalario BEFORE UPDATE OF salario ON empleados FOR EACH ROW BEGIN IF :NEW.salario > :OLD.salario*1.20 THEN raise_application_error (-20600,:new.Salario||'no se puede aumentar el salario ms de un 20%'); END IF; END; Inserte las tuplas necesarias para comprobar que funcional el trigger

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

13

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios

Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejercicio 3. Crear una tabla empleados_baja con la siguiente estructura: CREATE TABLE empleados_baja
(dni nomemp mng salario usuario fecha char(4) PRIMARY KEY, varchar2(15), char(4), integer, varchar2(15), date );

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

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 grabarn las variables del sistema USER y SYSDATE que almacenan el usuario y fecha actual. El comando que dispara el trigger es AFTER DELETE.
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin
14

noviembre 2011

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

CREATE OR REPLACE TRIGGER bajas AFTER DELETE ON empleados FOR EACH ROW BEGIN INSERT INTO empleados_baja VALUES (:old.dni,:old.nomemp,:old.mgr, :old.salario, USER, SYSDATE); END;

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

15

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejercicio 4.
Modificar la tabla empleados aadiendo el campo departamento (integer) (ALTER TABLE ).

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

Crear un trigger para impedir que el salario total por departamento (suma de los salarios de los empleados por departamento) sea superior a 10.000. Ayuda: Ser necesario distinguir si se trata de una modificacin o de una insercin. Cuando se trate de una insercin (IF INSERTING...) se comprobar que el salario del empleado a insertar (:NEW.salario) ms el salario total del departamento al que pertenece dicho empleado no es superior a 10.0000. Cuando se trate de una modificacin (IF UPDATING...), al salario total del departamento se le sumar el :NEW.salario y se le restar el :OLD.salario.
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin
16

noviembre 2011

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Ejercicio 5. Crear un trigger para impedir que un empleado y su jefe pertenezcan a departamentos distintos.

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

17

IISSI

Diseo de Amador Durn Toro, 2011

Diseo de Amador Durn Toro, 2011

Introduccin al Modelado Conceptual

29/11/2012

Ejercicios
Ejercicio 6.
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

Visualizar los trigger definidos sobre una tabla consultando la vista ALL_TRIGGERS.
DESC ALL_TRIGGERS SELECT trigger_name, status FROM ALL_TRIGGERS WHERE table_name = 'empleados';

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 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 descripcin de un trigger:


SELECT description FROM USER_TRIGGERS WHERE trigger_name = 'JEFES';

Ver el cuerpo de un trigger:


Diseo de Amador Durn Toro, 2011 Diseo de Amador Durn Toro, 2011

SELECT trigger_body FROM USER_TRIGGERS WHERE trigger_name = 'JEFES';

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

18

Ejercicios
Escuela Tcnica Superior de Ingeniera Informtica Departamento de Lenguajes y Sistemas Informticos

1. Introduccin 2. Creacin de triggers 3. Expresiones 4. Activacin 5. Documentacin 6. Ejercicios

CREATE OR REPLACE TRIGGER sumaDept BEFORE INSERT OR UPDATE ON emp FOR EACH ROW DECLARE sumaSalarios INTEGER; BEGIN SELECT sum(sal) INTO sumaSalarios FROM emp WHERE sal = :new.sal group by deptno; IF (inserting and sumaSalarios > 10000) THEN raise_application_error (-20600,:new.deptno||'no pueden cobrar ms de 10000'); END IF; END;

noviembre 2011

Introduccin a la Ingeniera del Software y a los Sistemas de Informacin

19

IISSI

10

Potrebbero piacerti anche