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



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

Triggers. BASES DE DATOS Mercedes García Merayo

PRÁCTICA III. DISPARADORES EN SQL (II)

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

Diseño de bases de datos

Diseño de bases de datos

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

Disparadores en ORACLE. Disparadores Tema 11

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

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

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

BD Activas: Motivación

Disparadores en ORACLE

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

La sintaxis de un trigger a nivel de registro es:

Tema: DISPARADORES (TRIGGERS)

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

Unidad 6. Procedimientos Almacenados y Disparadores

Los disparadores pueden emplearse para muchas cosas diferentes, incluyendo:

Triggers (o disparadores) Definición y sintaxis

Disparadores en ORACLE

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

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

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

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

BASES DE DATOS ACTIVAS

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

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

Triggers. Introducción

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

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

Refactorización en Base de Datos. mayo de 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

Disparadores en ORACLE

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

Tema 1. Bases de datos activas

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

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

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

Introducción a Oracle PL / SQL 12c

SQL SERVER APLICADO (SSA010)

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

Oracle PL/SQL. Programa de Estudio.

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.

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

Unidad III. Bases de Datos

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

Procedimientos, Funciones, Trigger y Cursores en ORACLE

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

Tema 5. Lenguaje de Definición de Datos

SQL: Vistas, Triggers, y Procedimientos Almacenados

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

RESTRICCIONES DE DOMINIOS

Introducción a PL/SQL

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

Jair Ospino Ardila -- Guía Sencilla

Tema 1. Bases de datos activas

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

EXAMEN DE BASES DE DATOS 11/06/04 Esquema de trabajo

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

Disparadores en Oracle (Ejemplos Prácticos)

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

Ejercicios SQL - Definición de Datos - Solució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)

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

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

Tema 5. DML (Parte II)

Disparadores (triggers)

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

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

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

CONOCIMIENTOS DE CONCEPTOS BASES DE DATOS

Disparadores en ORACLE

Base de datos Lenguaje SQL

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

Manejo de Tablas y Llaves Foráneas

Catedra de Base de Datos

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

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

Otros objetos de Base de Datos

Catedra de Base de Datos

Introducción a SQL (DDL)

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

ÍNDICE INTRODUCCIÓN...13

Conceptos básicos de programación con PL/SQL

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

- 1 - Mg. Abril Saire Peralta

GESTORES GESTORES DE BASES DE DATOS

Formato para prácticas de laboratorio

GUIA DE TRIGGERS (Disparadores) EN MYSQL

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

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

6.1. Introducción. Guía 5. SQL.

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

ejemplos de consultas SQL para obtener claves, DF y DMV en la BD de prendas de ropa

Introducción a PL/SQL

Transcripción:

DISPARADORES EN SQL:1999 DISPARADORES EN SQL Modelos Avanzados de Bases de Datos Un (trigger) es un procedimiento especial que se ejecuta en respuesta a un evento específico. Ej. Al aumentar el sueldo de un empleado, que se aumente automáticamente el total de gastos de la empresa. Un tiene 3 partes: Evento: cabecera con la que se crea el trigger Condición: que tiene que suceder para que se dispare el trigger Acción: que actividades se tienen que llevar a cabo CREAR O REEMPLAZAR UN DISPARADOR CREATE [OR REPLACE] TRIGGER nombre [temporalidad del evento] [granularidad del evento] [WHEN condición] cuerpo del trigger END; EVENTO CONDICIÓN ACCIÓN Temporalidad del evento BEFORE Operación El cuerpo del debe ejecutarse antes del evento que causa la activación del AFTER Operación El cuerpo del debe ejecutarse después del evento que causa la activación del Operación: INSERT, DELETE O UPDATE Ej. AFTER DELETE ON nombre_tabla AFTER DELETE OF nombre_columna ON nombre_tabla

Ej: 1) CREATE OR REPLACE TRIGGER emp BEFORE INSERT ON empleado.. 2) CREATE OR REPLACE TRIGGER salar AFTER DELETE OF salario ON empleado Granularidad del evento El es a nivel de fila. El cuerpo del se debe aplicar fila a fila a la tabla afectada. FOR EACH STATEMENT El es a nivel de orden. El cuerpo del se debe aplicar a toda la tabla a la vez. WHEN condición (sólo para es a nivel de fila) Operadores relacionales: < <= > >= = <> Operadores lógicos: AND, OR, NOT WHEN condición Para referirnos al valor de la fila OLD NEW Si están en el cuerpo del se referencian como :OLD ó :NEW

Con OLD.nombre_columna referenciamos: al valor que tenía la columna antes del cambio debido a una modificación (UPDATE) al valor de una columna antes de una operación de borrado sobre la misma (DELETE) al valor NULL para operaciones de inserción (INSERT) Con NEW.nombre_columna referenciamos: Al valor de una nueva columna después de una operación de inserción (INSERT) Al valor de una columna después de modificarla mediante una sentencia de modificación (UPDATE) Al valor NULL para una operación de borrado (DELETE) EJEMPLO CREATE TRIGGER Ejemplo-fila AFTER DELETE OF codigo ON tabla1 WHEN ((OLD.nombre= pepe ) OR (OLD.edad > 35)) DELETE FROM tabla2 WHERE tabla2.cod=:old.cod; END Ejemplo-columna; EJEMPLO CREATE TRIGGER Ejemplo_sentencia AFTER DELETE ON tabla1 REFERENCING OLD AS anterior DELETE FROM tabla2 WHERE tabla2.cod=anterior.cod; END Ejemplo_sentencia; ACTIVARDESACTIVAR DE DISPARADORES Todos los es asociados a una tabla: ALTER TABLE nombre_tabla ENABLE ALL TRIGGERS ALTER TABLE nombre_tabla DISABLE ALL TRIGGERS Un específico: ALTER TRIGGER nombre_ ENABLE ALTER TRIGGER nombre_ DISABLE

OTRAS FUNCIONES Eliminar un DROP TRIGGER nombre_ Ver todos los es y su estado SELECT TRIGGER_NAME, STATUS FROM USER_TRIGGERS; OTRAS FUNCIONES Ver el cuerpo de un SELECT TRIGGER_BODY FROM USER_TRIGGERS WHERE TRIGGER_NAME= nombre_ ; Ver la descripción de un SELECT DESCRIPTION FROM USER_TRIGGERS WHERE TRIGGER_NAME= nombre_ ; Funciones del cuerpo del En el cuerpo del se pueden incluir: Sentencias SQL Subprogramas escritos en PLSQL Funciones: Inserting, Deleting, Updating Utilizar cuando el se tiene que activar ante diferentes operaciones pero deben hacer cosas diferentes para cada evento. Funciones del cuerpo del CREATE OR REPLACE TRIGGER ejemplo BEFORE INSERT OR UPDATE OR DELETE ON tabla IF DELETING THEN Acciones asociadas al borrado ELSIF INSERTING THEN Acciones asociadas a la inserción ELSE Acciones asociadas a la modificación END IF; END ejemplo;

Funciones del cuerpo del RAISE_ERROR_APPLICATION (nro_error, mensaje); [-20000 y -20999] Esta función devuelve mensajes de error al usuario cuando éste va a realizar una operación no permitida y que interrumpe la ejecución del CREATE OR REPLACE TRIGGER ejemplo BEFORE DELETE ON tabla IF tabla.columna= valor_no_borrable THEN RAISE_APPLICATION_ERROR(-20000, La no se puede borrar ); END IF;... END ejemplo; fila Declaración de variables Dentro de un se pueden declarar variables que se utilizarán dentro del cuerpo del mismo. CREATE... BEFORE... [...] DECLARE Declaración de variables... Nombre CONSTANT NUMBER:=valor; nombre TIPO; nombre nombretabla.nombrecolumna%type; nombre nombretabla%rowtype; Crea una variable nombre del mismo tipo que el de la columna nombrecolumna de la tabla nombretabla Crea una variable nombre del tipo de la tabla. Para asignar el valor de una columna se pone: nombre.nombrecolumna Restricciones de los es Restricciones de los es Tabla mutante. La que está siendo modificada por una operación DML o una tabla que se verá afectada por los efectos de un DELETE CASCADE debido a la integridad referencial Tabla de restricción. Tabla de la que un puede necesitar leer debido a una restricción de integridad referencial Las órdenes del cuerpo de un no pueden: Leer o modificar una tabla mutante Leer o modificar claves primarias o ajenas de una tabla de restricción Para evitar estos problemas es necesaria la utilización de paquetes

Restricciones de los es CREATE OR REPLACE TRIGGER chequear_salario BEFORE INSERT OR UPDATE ON empleado WHEN (new.trabajo<> presidente ) DECLARE v_salariomin empleado.salario%type; v_salariomax empleado.salario%type; SELECT MAX(salario), MIN(salario) FROM empleado INTO v_salariomin, v_salariomax FROM empleado WHERE trabajo=:new.trabajo; IF :new.salario<v_salariomin OR :new.salario> v_salariomax THEN RAISE_APPLICATION_ERROR(-20001, Sueldo fuera de rango ); END IF; END chequear_salario; UPDATE empleado SET salario=1500 WHERE nom_emp= Cortecero ; Restricciones de los es Dos tablas: empleado y departamento. En la tabla empleado tenemos el número de departamento como clave ajena. CREATE TRIGGER ejemplo AFTER UPDATE ON nrodep OF departamento UPDATE empleado SET empleado.dep = :NEW.nrodep WHERE empleado.dep= :OLD.nrodep; END ejemplo; UPDATE departamento SET nrodep= 1 WHERE nrodep=7; Disparadores de sustitución INSTEAD OF. Sólo para vistas CREATE VIEW vista AS SELECT edificio, sum(numero_asientos) FROM habitaciones GROUP BY edificio; Es ilegal hace una operación de borrado directamente en la vista: DELETE FROM vista WHERE edificio= edificio 7 ; Disparadores de sustitución CREATE TRIGGER borra_en_vista INSTEAD OF DELETE ON vista DELETE FROM habitaciones WHERE edificio = :OLD.edificio; END borra_en_vista; Se crea un de sustitución que efectúe el borrado equivalente pero sobre la tabla habitaciones