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

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

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

Triggers 27/11/2014. 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

Triggers. BASES DE DATOS Mercedes García Merayo

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

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

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

Unidad 6. Procedimientos Almacenados y Disparadores

Tema: DISPARADORES (TRIGGERS)

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

Diseño de bases de datos

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:

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

Los disparadores pueden emplearse para muchas cosas diferentes, incluyendo:

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

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

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

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

BD Activas: Motivación

Unidad III. Bases de Datos

PROCEDIMIENTOS ALMACENADOS

TRIGGER LEONEL CADOSO ROMERO 1

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

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

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

Disparadores en ORACLE. Disparadores Tema 11

Disparadores (triggers)

Jair Ospino Ardila -- Guía Sencilla

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

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

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

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

GUIA DE TRIGGERS (Disparadores) EN MYSQL

Departamento de Lenguajes y Sistemas Informáticos

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

Conceptos de Bases de Datos Relacionales Triggers

Gestión de nóminas diciembre 2011

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

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

PRÁCTICA III. DISPARADORES EN SQL (II)

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

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

SQL: Vistas, Triggers, y Procedimientos Almacenados

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

Refactorización en Base de Datos. mayo de 2008

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

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

BASES DE DATOS ACTIVAS

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

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

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

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.

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

Triggers (o disparadores) Definición y sintaxis

BASES DE DATOS ACTIVAS

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

DISEÑO DE BASES DE DATOS ºC Examen 8/Feb/2006

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

Otros objetos de Base de Datos

Disparadores en ORACLE

BASES de DATOS ÁCTIVAS

Catedra de Base de Datos

Procedimientos, Funciones, Trigger y Cursores en ORACLE

PRÁCTICA T2. El lenguaje procedural PL/SQL de Oracle

DR/UC. DR/UC FACTURA(CIF, N_Factura, Fecha, Total) ASIGNATURA(Cod_Asignatura, Titulación, Nombre_Asig, Curso, Empresa_fotocopias, precio_fotocopia)

Tema 1. Bases de datos activas

Solució Exercici Prac. 3b (Esquema).

Disparadores en ORACLE

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo

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

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

Catedra de Base de Datos

Base de datos II Facultad de Ingeniería. Escuela de computación.

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

Tema 5. Lenguaje de Definición de Datos

Características del lenguaje SQL

departamento NUMBER(3) FK (DEPARTAMENTOS.CODIGO) salario NUMBER(3) NOT NULL fecha_alta DATE NOT NULL jefe NUMBER(5) FK (EMPLEADOS.

Triggers. Introducción

Oracle Database: Conceptos Básicos de SQL y PL/SQL

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

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explicitos combinados con un estructura de bloque.

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

Bases de Datos Ejercicio Número 2 Bogotá, Diciembre 5 de 2013

Oracle Express y Toad for Oracle

DISEÑO DE BASES DE DATOS 2007/2008 2ºC Examen 18/Jun/2008. Cuestiones. Problema 1: Diseño conceptual BD

EJEMPLOS PRÁCTICOS SQL

Cadena de caracteres Numéricas Fecha y hora Booleanas Tipo registro Tipo cursor

Tema 5. DML (Parte II)

Tema 1. Bases de datos activas

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

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

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

Introducción a la Ingeniería del Software y a los Sistemas de Información. Alojamientos. octubre Enunciado

Introducción a PL/SQL

Oracle Database 10g: Conceptos Básicos de SQL y PL/SQL

DESARROLLO SISTEMAS INFORMATICOS WEB 1 (DSIW1) ING. TOMAS URBINA. Funciones en MySql

Transcripción:

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

Triggers (Disparadores) Los triggers son bloques PL/SQL que se ejecutan de manera implícita cuando se están manipulando (INSERT, DELETE, UPDATE) los datos de una tabla. Son usados principalmente para establecer reglas de integridad complejas y labores de auditoría.

Triggers (Disparadores) II La ejecución de un trigger es transaccional, es decir, si un trigger de fila afecta n registros y si uno solo de ellos aborta,entonces todo el proceso se cancela. El orden de ejecución de los triggers es el siguiente: 1. Se ejecutan (si los* hay) los triggers BEFORE de operación. 2. Se ejecutan para cada fila: a. (Si los* hay) los triggers BEFORE de fila. b. Se ejecuta la operación DML correspondiente. c. (Si los* hay) los triggers AFTER de fila. 3. Se ejecutan (si los* hay) los triggers AFTER de operación * Si hay varios triggers con idéntica definición (a partir de Oracle 8i), el orden de ejecución entre ellos es aleatorio.

Un trigger tiene asociado: Un Evento: se refiere a la operación que se va a efectuar sobre la tabla (INSERT, DELETE o UPDATE). Un Momento: significa cuando se debe disparar el trigger en relación con el evento. Sus posibles valores son AFTER o BEFORE. Un Tipo: indica el número de veces que el cuerpo del trigger se debe ejecutar, si por la operación en conjunto (trigger de operación) o por cada fila procesada (trigger de fila).

Sintaxis CREATE [OR REPLACE] TRIGGER nombre_trigger momento evento ON tabla [ FOR EACH ROW [ WHEN condición de restricción] ] bloque de PL/SQL Cuando el evento es UPDATE, se puede(n) especificar la(s) columna(s) con la palabra OF (si no se especifican, el trigger se dispara con cualquiera de las columnas de la tabla que sea actualizada). El bloque comienza con la palabra DECLARE o BEGIN.

Referencia a valores antes y después de la operación Cuando es un trigger de fila, se puede hacer referencia al valor de una columna antes del cambio por medio de : OLD.columna y al valor después del cambio con :NEW.columna. EVENTO VALOR ANTERIOR VALOR NUEVO INSERT NULL El insertado DELETE UPDATE Valor antes del borrado Valor antes de la actualización NULL Valor después de la actualización

Ejemplo Trigger de operación Sea la tabla de productos: CREATE TABLE PRODUCTO( codigo NUMBER(6) PRIMARY KEY, precio NUMBER(6)); CREATE OR REPLACE TRIGGER control_inserción BEFORE INSERT ON producto BEGIN IF (TO_CHAR(SYSDATE,'DAY') IN ('SAT','SUN')) OR (TO_NUMBER(TO_CHAR(SYSDATE,'HH24')) NOT BETWEEN 8 AND 18) THEN RAISE_APPLICATION_ERROR(-20506,'Sólo se pueden ingresar productos en horario de oficina'); END IF; END; / La instrucción RAISE_APPLICATION_ERROR abortará la operación de inserción si ésta se intenta realizar en el horario no permitido.

Ejemplo Trigger de fila Supóngase la siguiente condición en una empresa: Ningún empleado puede ganar más que su jefe Supóngase que los jefes se manejan en una tabla separada a la de los empleados Sean las tablas: CREATE TABLE jefe( cedula NUMBER(5) PRIMARY KEY,nombre VARCHAR2(10) NOT NULL, salario NUMBER(8) NOT NULL, secretaria VARCHAR2(10)); CREATE TABLE emp( cedula NUMBER(10) PRIMARY KEY, nombre VARCHAR2(10) NOT NULL, jefe NUMBER(5) NOT NULL REFERENCES jefe,--clave foránea salario NUMBER(8) NOT NULL);

Ejemplo Trigger de fila (II) CREATE OR REPLACE TRIGGER el_jefe_gana_mas BEFORE INSERT ON emp DECLARE BEGIN END; / FOR EACH ROW salario_jefe jefe.salario%type; SELECT salario INTO salario_jefe FROM jefe WHERE cedula = :NEW.jefe; IF salario_jefe < :NEW.salario THEN RAISE_APPLICATION_ERROR(-20505,'Un empleado no puede ganar más que su jefe'); END IF;

Ejercicios: Considerar lo siguiente: Si a un empleado le actualizan su salario, que éste no vaya a quedar más alto que el de su jefe. Si a un empleado le cambian de jefe no le vayan a asignar uno que gane menos que él. Si a un jefe le bajan el salario se debe verificar que no quede más bajo que el de alguno de sus subordinados. Puede una persona figurar al mismo tiempo tanto en la tabla de empleados como en la de jefes? Cómo manejar el despido de jefes? Qué hacer con sus subordinados?

La cláusula WHEN Sirve para agregar una condición adicional para activar el trigger Para referirse a NEW y a OLD no se usan los dos puntos dentro de la condición de WHEN Ejemplo. Sean las tablas: CREATE TABLE producto( codigo NUMBER(3) PRIMARY KEY,precio NUMBER(4)); CREATE TABLE auditoria( usuario VARCHAR2(20),cuando DATE, producto NUMBER(6));

Ejemplo WHEN Usando WHEN CREATE or REPLACE TRIGGER quien_baja_precio BEFORE UPDATE OF precio ON producto FOR EACH ROW WHEN (new.precio < old.precio) BEGIN INSERT INTO auditoria VALUES(USER, SYSDATE,old.codigo); END; / Sin usar WHEN CREATE or REPLACE TRIGGER quien_baja_precio BEFORE UPDATE OF precio ON producto FOR EACH ROW BEGIN IF :new.precio < :old.precio THEN INSERT INTO auditoria VALUES(USER, SYSDATE, :old.codigo); END IF; END; / Conclusión: WHEN evita el uso de un IF explícito dentro del código. Ejercicio: Guardar el precio viejo y nuevo del producto.