Professional Documents
Culture Documents
Integrantes del Equipo: Atziry Crdenas Jijn Rosa Isela Brena Luis Israel Mendoza Vsquez
Contenido
Introduccin Definicin Aserto Ejemplos Asertos Definicin Triggers Requisitos de los Triggers Ejemplos de Triggers
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.
Tipos de Disparadores
Orden INSERT | UPDATE | DELETE
Temporalizacin
BEFORE|AFTER
Nivel
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
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).
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.
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.
13
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 | +--------+------------+------+