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



Documentos relacionados
Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Diseño de bases de datos

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

Diseño de bases de datos

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Triggers. BASES DE DATOS Mercedes García Merayo

DISPARADORES EN SQL SINTAXIS GENERAL DE UN DISPARADOR EN SQL:2003

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

La sintaxis de un trigger a nivel de registro es:

Unidad 6. Procedimientos Almacenados y Disparadores

Tema: DISPARADORES (TRIGGERS)

Disparadores en ORACLE. Disparadores Tema 11

Práctica 3: Lenguaje SQL 2ª Parte: Definición de datos. Objetivos

PRÁCTICA III. DISPARADORES EN SQL (II)

BD Activas: Motivación

Disparadores en ORACLE

Lenguaje SQL (2ª Parte) Definición de datos

Bibliografía Oracle Database Concepts - 10g Release 2 (10.2) (Octubre 2005)

1. Motivación: comportamientos activos. 2. Reglas ECA. Ejemplos BASES DE DATOS ACTIVAS. Las BD tradicionales se consideran pasivas

Tema II: El modelo relacional de datos. (2.7) Automatización

BASES DE DATOS ACTIVAS

EXAMEN: BASES DE DATOS 4º Ingeniería Informática (31 de enero de 2008)

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

BASES DE DATOS 2º CURSO E.U.I. / F.I. Práctica 3: El lenguaje SQL. 2ª Parte: Definición de datos 10 DE ABRIL DE 2000

Unidad III. Bases de Datos

Solución Ejercicio Prac. 3b (Esquema).

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

Los disparadores pueden emplearse para muchas cosas diferentes, incluyendo:

Triggers. Introducción

Conceptos de Bases de Datos Relacionales Triggers

Uso de Disparadores. Miguel Angel Garduño Cordova Isaac Méndez Hernández

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

Triggers (o disparadores) Definición y sintaxis

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Introducción a SQL (DDL)

Bases de Datos 2: Procedimientos Almacenados, Funciones y Triggers. Tecnólogo en Informática, sede Paysandú Bases de Datos 2

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Tema 1. Bases de datos activas

Laboratorios de BASES DE DATOS. (I.T. Informática)

Checks, Triggers y Excepciones en InterBase: validando desde la base de datos

Jair Ospino Ardila -- Guía Sencilla

SQL: Vistas, Triggers, y Procedimientos Almacenados

Tema 5. Lenguaje de Definición de Datos

Ejercicios SQL - Definición de Datos - Solución

Disparadores en ORACLE

Departamento de Lenguajes y Sistemas Informáticos

PL/SQL. - La unidad de programación utilizada por PL/SQL es el bloque. - Todos los programas de PL/SQL están conformados por bloques.

EJEMPLOS PRÁCTICOS SQL

Diseño de bases de datos

- 1 - Mg. Abril Saire Peralta

GUIA DE TRIGGERS (Disparadores) EN MYSQL

Oracle Database y Oracle SQL Developer

Diseño de bases de datos Práctica-1 Definición de datos

Un ejemplo teórico de trigger podría ser éste:

Triggers. Carmen Hernández Triggers y PL/SQL 2

SQL SERVER APLICADO (SSA010)

Los disparadores pueden ser utilizados para cumplir con alguna de las siguientes tareas:

Tipos de datos en SQL. SQL. DDL (Data Definition Language) CREATE DOMAIN CREATE TABLE CREATE TABLE. CREATE TABLE con restricciones de atributo

Catedra de Base de Datos

BASES DE DATOS ACTIVAS

Se crean para conservar la integridad referencial y la coherencia entre los datos entre distintas tablas.

Interacción con el Servidor Oracle8. Copyright Oracle Corporation, All rights reserved.

Examen de Bases de datos Grado de Ingeniería en Informática, Febrero, 2015

Tema 1. Bases de datos activas

Examen de Ficheros y bases de datos Convocatoria de junio II PARCIAL

Catedra de Base de Datos

Disparadores (triggers)

BASES de DATOS ÁCTIVAS

PROCEDIMIENTOS ALMACENADOS

TRIGGER LEONEL CADOSO ROMERO 1

HERRAMIENTAS DE SISTEMAS DE GESTION DE BASES DE DATOS

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Cursores, Triggers, Indices, Transacciones, Vistas Gestión y Modelación de Datos

Cuestión: Proceso de consultas en BD Relacionales. Problema 1: Diseño conceptual

RESTRICCIONES DE DOMINIOS

Oracle Express y Toad for Oracle

1. Se usará la Base de Datos llamada. 2. Borrar la tabla CtasBanc anterior y crearla: 5.1 Procedimientos y Funciones Almacenados SQL Server

Práctica 3: El lenguaje SQL (2ª parte). (7ª sesión).

Pre-Taller Gestión de Privilegios de Usuarios 2. Manipulación de Vistas 3. Creación y manipulación de Triggers (Introducción al uso de PL/pgsql)

Disparadores en ORACLE

GUÍA DE TRABAJO N 5 GRADO 11 Programación y Diseño de Articulación SENA Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Sistemas de Bases de Datos II ITS / ITSB EMT CETP

Haga clic para PostgreS cambiar el estilo

LEA ATENTAMENTE LAS PREGUNTAS Y RESUELVA CADA EJERCICIO COMO SE INDIQUE (EN CASO CONTRARIO EL EJERCICIO NO PUNTUARÁ) CADA EJERCICIO VALE UN PUNTO

Departamento de Lenguajes y Sistemas Informáticos E.T.S. de Ingeniería Informática Universidad de Sevilla Avda Reina Mercedes, s/n.

BASES DE DATOS 2º CURSO E.U.I. / F.I. Práctica 4: Estudio del SGBD ORACLE8 1 Gestión de transacciones 22 DE MAYO DE 2000

GUÍA DE TRABAJO N 7 GRADO 11. Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6 GUIA N 7 COMANDOS MYSQL II. CREAR UNA TABLA

Otros objetos de Base de Datos

Lo primero que se llevó a cabo fue la creación del entorno. Esto se llevó a cabo por medio de un usuario con privilegios DBA:

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

GBD Diseño físico de DDBB

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

PRÓLOGO... XI CAPÍTULO 1. FUNDAMENTOS DEL LENGUAJE PL/SQL.

Introducción a PL/SQL

Restricciones de Integridad. Claves Primarias. Protección. Índice. Clave de una Relación. Declaración n de Claves

Transcripción:

Triggers Grupo de Ingeniería del Software y Bases de Datos Universidad de Sevilla octubre 2011 Introducción Objetivos de la práctica Conocer qué son los y para qué se utilizan Aprender a construir Consultar cómo están almacenados y cómo se ven las propiedades de los octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 1

Introducción 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 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 octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 2 Introducción Un trigger tiene muchas aplicaciones entre las que cabe destacar: Forzar reglas de integridad que son difíciles de definir mediante constraints. 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.. octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 3

Introducción Ejemplos: Campo autocalcualdo con la duración de un contrato: Fecha Fin Fecha Inicio Campo autocalculado con la cuantía de la Señal: PrecioAlquiler*2 Validación de campos: La comisión del empleado debe estar entre el 50% y el 30% del valor del alquiler octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 4 Creación de Triggers Para definir los se utiliza el comando SQL: CREATE OR REPLACE TRIGGER La definición 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 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 tarea específica que realiza el Trigger. Octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 5

Sintaxis de Sintaxis de : 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>)]] octubre 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 una fila de la tabla, se utilizan los prefijos :OLD y :NEW Cuando estamos haciendo una modificación (UPDATE) de una fila podemos referirnos al valor antes de ser modificado (:OLD) y al valor después de la modificación (:NEW). 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: :NEW.salario > (:OLD.salario*1.25) octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 7

Activación de Un puede estar activado (ENABLE) o desactivado (DISABLE). Cuando está desactivado no ejecuta ninguna acción. 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 sobre una tabla cuando se hace una carga masiva de datos. octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 8 Documentación de Documentación de. Se pueden consultar las vistas: USER_TRIGGERS ALL_TRIGGERS DBA_TRIGGERS octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 9

Ejercicios Crear una tabla EMPLEADOS. 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) ); octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 10 Ejercicios Ejercicio 1. Crear un trigger sobre la tabla EMP para que no se permita que un empleado sea jefe (MGR) de más 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 más de 5'); END IF; END; Inserte las tuplas necesarias para comprobar que funcional el trigger octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 11

Ejercicios Ejercicio 2. Crear un trigger para impedir que se aumente el salario de un empleado en más de un 20%. Es necesario comparar los valores :old.salario y :new.salario cada vez que se modifica el atributo salario (BEFORE UPDATE). IF :NEW.salario > :OLD.salario*1.20 THEN raise octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 12 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 más de un 20%'); END IF; END; Inserte las tuplas necesarias para comprobar que funcional el trigger octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 13

Ejercicios Ejercicio 3. Crear una tabla empleados_baja con la siguiente estructura: CREATE TABLE empleados_baja (dni char(4) PRIMARY KEY, nomemp varchar2(15), mng char(4), salario integer, usuario varchar2(15), 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 el usuario y fecha actual. El comando que dispara el trigger es AFTER DELETE. octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 14 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; octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 15

Ejercicios Ejercicio 4. Modificar la tabla empleados añadiendo el campo departamento (integer) (ALTER TABLE ). 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 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 UPDATING...), al salario total del departamento se le sumará el :NEW.salario y se le restará el :OLD.salario. octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 16 Ejercicios Ejercicio 5. Crear un trigger para impedir que un empleado y su jefe pertenezcan a departamentos distintos. octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 17

Ejercicios Ejercicio 6. 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'; 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'; octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 18