0% encontró este documento útil (0 votos)
24 vistas32 páginas

TRIGGERS DML

trigeer2

Cargado por

elangelgabriel35
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas32 páginas

TRIGGERS DML

trigeer2

Cargado por

elangelgabriel35
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

TRIGGERS

o
disparadores

BASE DE DATOS II
Lic. Rosa Irene López Loza
Introducción

Los triggers (o disparadores) son elementos


clave que pueden automatizar acciones y
mantener la integridad de los datos.
¿QUÉ ES UN TRIGGER?

Un trigger (disparador o desencadenador) es un


tipo de procedimiento almacenado que se
ejecuta cuando se cumple una determinada
condición al realizar una operación.
¿Para qué sirve un TRIGGER SQL?

o Es una de las funcionalidades más útiles de las que


se dispone para diseño y mantenimiento de bases
de datos.

o Se puede implementar ciertas características sin


necesidad de desarrollar programación en otros
lenguajes externos.
Ventajas

 Provee una alternativa para la verificación de la


integridad en los datos.

 Se puede utilizar como tareas programadas (Task


Schedule).

 Útiles para auditar los cambios en las bases de datos


Desventajas

 Pueden aumentar la sobrecarga del servidor de


base de datos.

 Se ejecutan y son invisibles desde las aplicaciones


cliente, por lo tanto, es difícil averiguar qué
sucede en la capa de base de datos
Clases de Triggers en SQL

Trigger DML
Trigger DDL
Trigger DML

Se ejecutan cuando un usuario intenta modificar datos


mediante un evento de lenguaje de manipulación de
datos (DML).
Los eventos DML son instrucciones INSERT, UPDATE o
DELETE de una tabla o vista.
Trigger DML

TABLA

OPERACIONES
INSERTAR (INSERT)

ACTUALIZAR (UPDATE)

ELIMINAR (DELETE)
CARACTERÍSTICAS DE UN TRIGGER

✓ Se crean para conservar la integridad referencial y


la coherencia de los datos entre distintas tablas.

✓ Un trigger se asocia a un evento sobre una tabla.

✓ Si se crea un trigger para alguna acción de una


tabla, este se ejecuta de forma automática.
DIFERENCIA CON LOS PROCEDIMIENTOS
ALMACENADOS DEL SISTEMA

✓ No pueden ser invocados directamente; se ejecuta


automáticamente.

✓ No reciben, ni retornan parámetros.

✓ Son apropiados para mantener la integridad de los


datos, no para obtener resultados de consultas.
Tipos de TRIGGER DML

Insertar Actualizar Eliminar


(INSERT) (UPDATE) (DELETE)

INSTEAD OF FOR o AFTER


Tipos de TRIGGER DML

INSTEAD OF
FOR o AFTER
Especifica que se ejecuta el trigger
AFTER especifica que el en vez de la instrucción SQL, por lo
desencadenador solo se activa que se suplantan las acciones de las
cuando todas las operaciones instrucciones desencadenadoras.
especificadas en la instrucción SQL
se han ejecutado correctamente INSTEAD OF no se puede especificar
para los desencadenadores DDL.
AFTER es el valor predeterminado
cuando solo se especifica FOR. Solo se puede definir un trigger
INSTEAD OF por cada instrucción
Los desencadenadores AFTER no se INSERT, UPDATE o DELETE en tablas o
pueden definir en las vistas. vistas.
Sintaxis

CREATE TRIGGER [ esquema.]nombre_trigger


ON [ Tabla | Vista ]
FOR | AFTER | INSTEAD OF
[ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ]
AS
Sentencia SQL
Ejemplo AFTER/FOR:

Implementar un Trigger que permita


mostrar un mensaje cada vez que se
inserte un registro en la tabla
pacientes.
Solución

CREATE TRIGGER TR_mensaje


ON Pacientes
FOR insert
AS
PRINT '*** PACIENTE REGISTRADO ***'
go
Para que se ejecute el trigger creado:

INSERT INTO pacientes VALUES ( 'p0011’, 'Pepito’,


'Perez’, 'Rico’, 'Av. arce N° 123’, 2293847,
'12/06/1999’, 9283746, '1234567’, 'M’, 'O+’ )
Ejemplo INSTEAD OF:

1. Crear una vista que muestre todos los datos de los


pacientes y el nombre del médico que lo atendió.

2. Crear un Trigger que permita insertar un registro en la


tabla pacientes, cada vez se inserte un registro en la vista
creada en el punto 1.

3. Realizar una consulta que ejecute el trigger


Solución

1
create view PacAtendidoMed
as
SELECT p.*, m.nombre, m.apPaterno, m.apMaterno
FROM pacientes p INNER JOIN atenciones a ON
p.idPac = a.idPac INNER JOIN medicos m ON m.id =
a.id
Go
Solución
2
Create trigger tr_InsertaPac
on PacAtendidoMed
instead of insert
as
insert into pacientes select idPac, nombrePac, apPaternoPac,
apMaternoPac, direccionPac, telefonoPac, fechaNacPac,
ciPac, nroSeguroPaciente, sexo, tipoSangrePac from inserted
Go
Para que se ejecute el trigger creado:

insert into PacAtendidoMed values ('P0011', 'Pepito', 'Perez',


'Prado', 'Calle Beni 700', 2908000, '12/12/1990', 9090909, null, 'M',
'AB-', 'Marcela', 'Perez', 'Maceda')
Ejercicio

1. Modificar la vista creada para que muestre además los datos de


la tabla atenciones.

2. Modificar un Trigger para que, además, permita insertar un


registro en la tabla Atenciones, cada vez se inserte un registro en
la vista creada en el punto 1. Los datos que se deben agregar
son: AT018, Medicina General, Resfrio y antibióticos.

3. Realizar una consulta que ejecute el trigger


A. Disparador de Inserción

Cuando se inserta una nueva fila en una tabla, SQL


Server inserta los nuevos valores en la tabla INSERTED
el cual es una tabla del sistema. Está tabla toma la
misma estructura del cual se originó el TRIGGER, de
tal manera que se pueda verificar los datos y ante un
error podría revertirse los cambios.
A. Disparador de Inserción

Tabla temporal
TABLA
INSERTED

INSERTAR
Ejemplo:

Implementar un trigger que permita crear una


replica de los registros insertados en la tabla
Atenciones para dicho proceso se debe crear
una nueva tabla llamada AtencionesBAK con
las mismas columnas de la tabla Atenciones.
Solución

CREATE TRIGGER TR_replicaAtencion


on Atenciones
after insert
as
Begin
insert atencionesBAK select * from inserted
end
Consulta que hará que se ejecute el
trigger:

insert into atenciones values ('at018', 'p0009',


'M002', ’A05', '08/08/2023’, ‘Resfrío’,
‘Antibióticos', null)
Ejemplo

Crear un TRIGGER que inserte registros en una


tabla HISTORIAL (debe estar creada), que
guarde la fecha de inserción, descripción y el
usuario que lo registró, cada vez que se realice
una inserción en la tabla Internaciones.
Solución

CREATE TRIGGER TR_InsertarInternacion


ON internaciones
FOR INSERT
AS
insert into historial
values(getdate(), ‘Paciente Internado', system_user)
GO
Ejemplo

Modifique el TRIGGER creado en el ejemplo


anterior para que almacene también el
código de internación. (para esto también
debe modificar la tabla HISTORIAL y agregar
un campo para almacenar el código)
ALTER TRIGGER TR_InsertarInternacion
ON internaciones
FOR INSERT Agregar esta instrucción y ver
AS ¿qué ocurre?

set nocount on
declare @codInter varchar(10)
select @codInter = idInternacion from inserted
insert into historial values (getdate(), @codInter,
‘Paciente Internado', system_user)
GO
Ejercicio

1. Modificar el TRIGGER anterior para que cuando se realice la


internación, se actualice el estado de la cama.

2. Para probar el trigger modificado, realice el siguiente ejercicio:

Realizar la internación de la paciente “Betty Llanos Yana” en el

área de Maternidad y cuyo médico responsable es “Luis Mirta Luna”.

También podría gustarte