You are on page 1of 20

Asertos y Disparadores

Integrantes del Equipo: Atziry Crdenas Jijn Rosa Isela Brena Luis Israel Mendoza Vsquez

Admon de Base de Datos

Contenido
Introduccin Definicin Aserto Ejemplos Asertos Definicin Triggers Requisitos de los Triggers Ejemplos de Triggers

Admon de Base de Datos

Introduccin
Se conoce como aserto a una instruccin que contiene una expresin booleana de la que el programador sabe que en un momento dado de la ejecucin del programa se debe evaluar a verdadero. Los disparadores son mecanismos tiles para alertar a los usuarios o para realizar de manera automtica ciertas tareas cuando se cumplen determinadas condiciones.

Asertos
Un aserto es un predicado que expresa una condicin que se desea que la base de datos satisfaga siempre. Las restricciones de dominio y las de integridad referencial son formas especiales de los asertos. Sin embargo, hay muchas restricciones que no se pueden expresar utilizando nicamente estas formas especiales.

Asertos[2]
Ejemplos de estas restricciones pueden ser La suma de todos los importes de los prstamos de cada sucursal debe ser menor que la suma de todos los saldos de las cuentas de esa sucursal. Cada prstamo tiene al menos un cliente que tiene una cuenta con un saldo mnimo de 1200 Euros. En SQL-92 los asertos adoptan la forma: create assertion <nombre-aserto> check <predicado>

Asertos[3]
create assertion restriccin-saldo check(not exists (select * from prstamo where not exists (select * from restatario,impositor, cuenta where prstamo.nmeroprstamo=prestatario.nmero-prstamo and prestatario.nombre-prestatario = impositor.nombrecliente and impositor.nmero-cuenta = cuenta.nmerocuenta and cuenta.saldo >= 1200)))

Asertos[4]
Cuando se crea un aserto el sistema comprueba su validez. Si el aserto es vlido, slo se permiten las modificaciones posteriores de la base de datos que no hagan que se viole el aserto. Esta comprobacin puede introducir una sobrecarga importante si se han realizado asertos complejos.

Disparadores
Un disparador es un objeto de BD con nombre que se asocia a una tabla, y se activa cuando ocurre un evento en particular para la tabla.

Admon de Base de Datos

Tipos de Disparadores
Orden INSERT | UPDATE | DELETE

Temporalizacin

BEFORE|AFTER

Nivel

FOR EACH ROW|STATEMENT

Admon de Base de Datos

Ordenes de Disparadores
DROP TRIGGER <nombre> ALTER TRIGGER nombre [ENABLE | DISABLE] ALTER TABLE <nombre tabla> [ENABLE | DISABLE] ALL TRIGGERS SELECT TRIGER_NAME FROM USER_TRIGGER

Admon de Base de Datos

10

Usos
Son usados para mejorar la admn. de la BD. Pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. Permite implementar programas basados en paradigma lgico (sistemas expertos, deduccin).

Admon de Base de Datos

11

Ventajas
Seguridad de los datos mejorada. Ofrece un mayor control de la BD. Fuerzan restricciones dinmicas de integridad de datos y de integridad referencial. Respuesta instantnea ante eventos auditados.

Admon de Base de Datos

12

Desventajas
Un Trigger nunca se llama directamente. No utiliza parametros Utilizar moderadamente los Triggers. No se pueden usar en tablas temporales. Por funcionalidad no poner en un solo trigger: INSERT, UPDATE, DELETE.

Admon de Base de Datos

13

Sintaxis para crear un trigger


CREATE TRIGGER <nombre disparador> BEFORE| AFTER UPDATE| INSERT | DELETE ON <tabla> FOR EACH ROW | STATEMENT BEGIN <instrucciones> END

Admon de Base de Datos

14

Restricciones
No puede haber dos disparadores en una misma tabla.

Un disparador no puede emitir ninguna orden de control de transacciones ( COMMIT, ROLLBACK o SAVEPOINT). Por las mismas razones, ningn procedure o funcin llamado por el disparador puede emitir rdenes de control de transacciones. El disparador no puede declarar variables de tipo LONG.

Ejemplo 1
Crear un Disparador para insertar un pedido de algn producto cuando la cantidad de coste, en nuestro almacn, sea inferior a un valor dado.
BEFORE UPDATE ON tabla_almacen FOR ALL records IF NEW.producto < 100 THEN INSERT INTO tabla_pedidos(producto) VALUES ('1000'); END IF; SELECT DBO.POLVE.TEST END

Ejemplo 2
Si un disparador est monitoreando los cambios en la tabla empleados
CREATE TRIGGER ver_salario BEFORE UPDATE ON empleados REFERENCING NEW ROW AS n, OLD ROW AS o FOR EACH ROW IF n.salario <> o.salario THEN END IF;

Ejemplo 3
CREATE TRIGGER APTS_D AFTER DELETE ON APUNTES FOR EACH ROW BEGIN INSERT INTO SALDO SET SALDO.CUENTA=OLD.CUENTA, SALDO.ANO=YEAR(OLD.FECHA), SALDO.MES=MONTH(OLD.FECHA), SALDO.DEBE=OLD.DEBE*(-1), SALDO.HABER=OLD.HABER*(-1) ON DUPLICATE KEY UPDATE SALDO.DEBE=SALDO.DEBE+(OLD.DEBE*(-1)), SALDO.HABER=SALDO.HABER+(OLD.HABER*(-1)) ; END;

Ejemplo 4
CREATE TRIGGER modificacion AFTER INSERT ON persona FOR EACH ROW INSERT INTO nuevosDatos VALUES (NEW.codigo, CURRENT_DATE, 'i'); INSERT INTO persona VALUES ('1','Juan',20); La tabla de "nuevosDatos" habr cambiado: SELECT * FROM nuevosDatos;
+--------+------------+------+ | cdigo | cuando | tipo | +--------+------------+------+ | 1 | 2007-12-05 | i | +--------+------------+------+

Ejemplo clusula WHEN


CREATE TRIGGER tr1 BEFORE INSERT OR UPDATE OF salario ON scott.emp FOR EACH ROW BEGIN IF :NEW.job <> 'PRESIDENT' THEN <span class="comentario">/* Cuerpo del disparador */</span> END IF; END;

You might also like