5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... ·...

47
Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 1 Unidad 5 SQL Procedural 5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Transcript of 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... ·...

Page 1: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 1

Unidad 5SQL Procedural

5.1 Procedimientos y Funciones

Almacenados.

5.2 Disparadores (Triggers).

Page 2: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 2

1. Se usará la Base de Datos llamadaLaConsentida.

use LaConsentida

2. Borrar la tabla CtasBanc anterior y crearla:

create table CtasBanc

(IdCuenta int auto_increment primary key,

tipo char(10),

saldo numeric(10,2))

5.1 Procedimientos y Funciones

Almacenados

MySQL

Page 3: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 3

3. Añadir 2 tuplas:

insert into CtasBanc

values (1, 'Chequera',10000)

insert into CtasBanc

values (2, 'Inversión',0)

4. Consulte el contenido de la tabla:

select * from CtasBanc

5.1 Procedimientos y Funciones

Almacenados

Page 4: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 4

5. La tabla CtasBanc contiene la informaciónde las dos cuentas de la miscelanea “laconsentida”, una de ellas es una chequera yotra es una inversión.

6. Con frecuencia se requieren efectuartraspasos entre las cuentas, es decir, moverdinero de una cuenta hacia la otra.Escribiremos dos procedimientos paraefectuar esas tareas

5.1 Procedimientos y Funciones

Almacenados

Page 5: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 5

7. Los conceptos de programación relativos alos procedimientos y funciones sonaplicables a los procedimientosalmacenados.

8. Para poder escribir un procedimientoalmacenado en la Interfaz Workbench deMySQL o la Línea de Comandos, enprimer lugar hay que usar otro delimitador(en vez de punto y coma):

delimiter //

5.1 Procedimientos y Funciones

Almacenados

Page 6: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

5.1 Procedimientos y Funciones

Almacenados

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 6

delimiter //

Create procedure

DepositoInversion(IN vImporte numeric(10,2))

BEGIN

update CtasBanc set saldo=saldo-vImporte

where IdCuenta=1;

update CtasBanc set saldo=saldo+vImporte

where IdCuenta=2;

END;

//

Termina la instrucción de creación del procedimiento, si no hubiéramos cambiado el delimitador, el primer “punto y

coma” se interpretaría como el final del create.

“vImporte” es un parámetro de valor ( IN = entrada ), la “v” la

elegimos para indicar que es una variable.

Page 7: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

5.1 Procedimientos y Funciones

Almacenados

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 7

delimiter //

Create procedure

DepositoInversion(IN vImporte numeric(10,2))

BEGIN

start tansaction

update CtasBanc set saldo=saldo-vImporte

where IdCuenta=1;

update CtasBanc set saldo=saldo+vImporte

where IdCuenta=2;

commit;

END; //

Page 8: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 8

delimiter ;

select * from CtasBanc;

call DepositoInversion(9000);

select * from CtasBanc;

Llamada a ejecución del procedimiento.

Instruye a MySQL para que el terminador sea de nuevo punto y

coma.

5.1 Procedimientos y Funciones

Almacenados

Page 9: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 9

delimiter //

create procedure

RetiroInversion(IN vImporte numeric(10,2))

BEGIN

start tansaction

update CtasBanc set saldo=saldo-vImporte

where IdCuenta=2;

update CtasBanc set saldo=saldo+vImporte

where IdCuenta=1;

commit;

END; //

5.1 Procedimientos y Funciones

Almacenados

Page 10: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 10

delimiter ;

select * from CtasBanc;

call RetiroInversion(5000);

select * from CtasBanc;

call DepositoInversion(1000);

select * from CtasBanc;

5.1 Procedimientos y Funciones

Almacenados

Page 11: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 11

1. Se usará la Base de Datos llamadaLaConsentida.

use LaConsentida

2. Borrar la tabla CtasBanc anterior y crearla:

create table CtasBanc

(IdCuenta int identity primary key,

tipo char(10),

saldo numeric(10,2))

SQL Server

5.1 Procedimientos y Funciones

Almacenados

Page 12: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 12

3. Añadir 2 tuplas:

insert into CtasBanc

values ('Chequera',10000)

insert into CtasBanc

values ('Inversión',0)

4. Consulte el contenido de la tabla:

select * from CtasBanc

5.1 Procedimientos y Funciones

Almacenados

Page 13: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD-13

create procedureDepositoInversion @vImporte numeric(10,2) asBEGIN

begin transactionupdate CtasBanc

set saldo=saldo-@vImportewhere IdCuenta=1

update CtasBancset saldo=saldo+@vImportewhere IdCuenta=2

commitEND

5.1 Procedimientos y Funciones

Almacenados

Page 14: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 14

select * from CtasBanc

execute DepositoInversion 1000

select * from CtasBanc

Llamada a ejecución del procedimiento.

5.1 Procedimientos y Funciones

Almacenados

Page 15: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 15

create procedureRetiroInversion @vImporte numeric(10,2) asBEGIN

begin transactionupdate CtasBanc

set saldo=saldo-@vImportewhere IdCuenta=2

update CtasBancset saldo=saldo+@vImportewhere IdCuenta=1

commit

END

5.1 Procedimientos y Funciones

Almacenados

Page 16: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 16

select * from CtasBanc

execute RetiroInversion 5000

select * from CtasBanc

execute DepositoInversion 1000

select * from CtasBanc

5.1 Procedimientos y Funciones

Almacenados

Page 17: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 17

Para la Base de Datos LaConsentida, escriba un procedimiento llamado SaldosIniciales que reciba dos valores, correspondientes al saldo de cada cuenta y los asigne a las tuplascorrespondientes de la tabla CtasBanc.

El procedimiento debe asumir que las tuplas ya existen en la tabla.

EjercicioMySQL y SQL Server

5.1 Procedimientos y Funciones

Almacenados

Page 18: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 18

delimiter $$

create function SaldoCuenta(vCuenta int)

returns numeric(10,2)

BEGIN

declare vSaldo numeric(10,2);

select saldo from CtasBanc where IdCuenta=vCuenta

into vSaldo;

return vSaldo;

END $$

delimiter ;

MySQL

5.1 Procedimientos y Funciones

Almacenados

Page 19: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 19

select * from CtasBanc;

set @vSaldoChequera = SaldoCuenta(1);

select @vSaldoChequera;

call DepositoInversion(3000);

select SaldoCuenta(1),SaldoCuenta(2);

Llamada a ejecución de la función (tiene que incluirse en un select o asignarse a

una variable

5.1 Procedimientos y Funciones

Almacenados

Page 20: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 20

SQL SERVER

create function SaldoCuenta(@vCuenta int)returns numeric(11,2)

asBEGINdeclare @vSaldo numeric(11,2)select @vSaldo=saldo from CtasBanc

where IdCuenta=@vCuenta return @vSaldo

END

5.1 Procedimientos y Funciones

Almacenados

Page 21: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 21

select dbo.SaldoCuenta(1) as Chequeraselect dbo.SaldoCuenta(2) as Inversion

update CtasBanc set saldo=1000 where idCuenta=2

update CtasBanc set saldo=9000where idCuenta=1

select dbo.SaldoCuenta(1) as Chequeraselect dbo.SaldoCuenta(2) as Inversion

dbo es el esquema por default, Sql

Server lo obliga en la sintáxis

5.1 Procedimientos y Funciones

Almacenados

Page 22: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 22

begin transactionexecute DepositoInversion 4000if dbo.SaldoCuenta(1)<0

rollbackelse

commit

select * from CtasBanc

-- EJECUTE ESTA TRANSACCIÓN 3 o MÁS VECES

5.1 Procedimientos y Funciones

Almacenados

Page 23: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 23

begin transactionexecute RetiroInversion 3500if dbo.SaldoCuenta(2)<0

rollbackelse

commit

select * from CtasBanc

-- EJECUTE ESTA TRANSACCIÓN 3 VECES

5.1 Procedimientos y Funciones

Almacenados

Page 24: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 24

En base al esquema de abajo:1. Diseñe una transacción para añadir a cierto alumno una

materia a cursar.2. Diseñe una función que de como resultado el número de

materias que tiene un alumno.3. En la transacción, si luego de añadir una materia, el

número de materias cursadas sobrepasa 5, no se deberá registrar la nueva materia cursada.

5.1 Procedimientos y Funciones

Almacenados

Page 25: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 25

Ejercicio 2:Del esquema de la página anterior elimine la columna NumMatCursadasde la tabla Alumnos y escriba una expresión de consulta que reporte los nombres de los alumnos y el numero de materias cursadas por cada alumno. Use una función que cuente el número de materias cursadas de un alumno en particular.Modifique la transacción creada en el ejercicio anterior para que de el resultado esperado de acuerdo al nuevo esquema.

5.1 Procedimientos y Funciones

Almacenados

Page 26: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 26

Ejercicio:Escriba un procedimiento almacenado en una Base de Datos de MySQL para

enviar como parámetros los valores a insertar en una tupla de la tabla

Materias.

Los datos que se envían al procedimiento deben ser todos excepto

NumCreditos (esa columna se calcula de la siguiente manera:

HorasTeoria*2+HorasPractica).

En caso de que se requiera de dos o mas comandos DML para resolver el

problema, se deberá definir una transacción para evitar que se conserve una

tupla con datos incompletos.

MateriasIdMateria ClaveMat Nombre Creditos HorasTeo HorasPra

1 1810 Estructuras de Datos 10 4 22 1533 Inv. De Operaciones II 8 4 0

3 1001 Matemáticas I 8 4 0

4 1805 Probabilidad y Estadística 6 3 0

5 1806 Programación orientada a objetos 8 3 26 1813 Fundamentos de Bases de Datos 8 4 0

5.1 Procedimientos y Funciones

Almacenados

Page 27: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 27

Un trigger es un objeto de la B.D., que está asociadocon una tabla y que se activa cuando cierto eventoocurre.

Los eventos que el DBMS monitorea para efectos delos triggers son: insert, update, delete.

5.2 Disparadores (Triggers)

Page 28: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 28

Los triggers pueden configurarse para que seactiven antes o después del eventocorrespondiente.

Por ejemplo:

Un trigger que se active antes de que se borreuna tupla.

Un trigger que se active después de que semodifique una tupla.

5.2 Disparadores (Triggers)

Page 29: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 29

MySQL

Crear una Base de Datos llamada Unidad 5 y enella crear las siguientes tablas:

create table Maestros (

IdMaestro int auto_increment primary key,

Curp char(18) unique,

Nombre varchar(40),

Email varchar(40) unique)

5.2 Disparadores (Triggers)

Page 30: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 30

create table

InasistMaestros (

IdInasistM int auto_increment primary key,

IdMaestro int references Maestros,

Fecha date,

Hora time)

5.2 Disparadores (Triggers)

Page 31: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 31

create table Mensajes (

IdMensaje int auto_increment primary key,

NombreDestinatario varchar(40),

Email varchar(40),

Texto text,

FueEnviado boolean)

5.2 Disparadores (Triggers)

Page 32: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 32

Ahora se creará un trigger que se activará cada vez que se añada una tupla correspondiente a la Inasistencia de un profesor al aula.

El trigger causará la adición de una tupla en una tabla de mensajes de correo para que posteriormente, de manera automática, se envíe el mensaje al profesor comunicándole que deberá justificar la inasistencia o procederá un descuento en su salario.

5.2 Disparadores (Triggers)

Page 33: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 33

create trigger tInasistMaestros

after insert on InasistMaestros

for each row insert into Mensajes

select 0,Nombre,Email,

'Se le ruega justificar inasistencia o procederá descuento', 0

from Maestros where IdMaestro=new.IdMaestro;

5.2 Disparadores (Triggers)

new se refiere a la nuevatupla recién insertada en

InasistMaestros

Complemente el mensaje

concatenandolo con la fecha y hora de la

Inasistencia

Page 34: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 34

Para acceder a las tupla recién insertada en

MySQL, se debe hacer referencia, como ya

se vio, a una seudotabla llamada new.

Cuando el trigger se activa a consecuencia de

un update, new y old contienen los datos

nuevos y originales respectivamente.

5.2 Disparadores (Triggers)

Page 35: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 35

Añada las siguientes tuplas:

insert into Maestros

values ( 0, 'U1','Uno', '[email protected]');

insert into Maestros

values ( 0, 'D2','Dos', '[email protected]');

insert into Maestros

values ( 0, 'T3', 'Tres', '[email protected]');

5.2 Disparadores (Triggers)

Page 36: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 36

Haga las siguientes consultas:

select * from Maestros;

select * from InasistMaestros;

select * from Mensajes;

5.2 Disparadores (Triggers)

Page 37: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 37

Añada la siguiente tupla:

insert into InasistMaestros

values ( 0, 2, cast('2016-10-31' as date),

cast('11:00' as time) )

Haga las siguientes consultas:

select * from Inasistmaestros;

select * from Mensajes;

5.2 Disparadores (Triggers)

Page 38: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 38

Se asume que deberá crearse un proceso que seleccione de la tabla Mensajes aquellos que no han sido enviados aún por correo electrónico para que se lleve a cabo el envío.

5.2 Disparadores (Triggers)

Page 39: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 39

Ejemplo SQL Server

create database Unidad5

use unidad5

create table Maestros( IdMaestro int identity primary key,

Curp char(18) unique,Nombre varchar(40),Email varchar(40) unique)

5.2 Disparadores (Triggers)

Page 40: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 40

create table InasistMaestros ( IdInasistM int identity primary key,

IdMaestro int references Maestros,fecha date, hora time)

create table Mensajes ( IdMensaje int identity primary key,

NombreDestinatario varchar(40),Email varchar(40),Texto text,FueEnviado bit)

5.2 Disparadores (Triggers)

Page 41: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 41

create trigger tInasistMaestroson InasistMaestros after insertas insert into MensajesselectNombre,Email,'Se le ruega justificar inasistencia o procederá descuento',0 fromMaestros,insertedwheremaestros.IdMaestro=inserted.IdMaestro

5.2 Disparadores (Triggers)

Page 42: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 42

Para acceder a las tupla recién insertada en

SQL Server, se debe hacer referencia, como ya

se vio, a una seudotabla llamada inserted.

Cuando el trigger se activa a consecuencia de

un update, inserted y deleted contienen los

datos nuevos y originales respectivamente.

5.2 Disparadores (Triggers)

Page 43: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 43

Añada las siguientes tuplas:

insert into Maestros values ( 'U1','Uno', '[email protected]')insert into Maestros values ( 'D2','Dos', '[email protected]')insert into Maestros values ( 'T3', 'Tres', '[email protected]')

5.2 Disparadores (Triggers)

Page 44: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 44

Haga las siguientes consultas:

select * from Maestrosselect * from Inasistmaesselect * from Mensajes

5.2 Disparadores (Triggers)

Page 45: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 45

Añada la siguiente tupla:

insert into InasistMaes values ( 3, '2016-10-31', '11:00' )

Haga las siguientes consultas:

select * from Inasistmaes;select * from Mensajes;

5.2 Disparadores (Triggers)

Page 46: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 46

En MySQL y SQL Server:

1. Haga los cambios necesarios al esquema y

modifique el trigger tInasistMaestros para que

solo las inasistencias injustificadas sean las que

ocasionen el mensaje de correo.

2. Añada otro trigger para que en caso de que una

inasistencia cambie su tipo a “justificada”, se

envíe un mensaje en el que se le comunica al

profesor que su inasistencia ha sido justificada y

no se le realizará descuento alguno.

5.2 Disparadores (Triggers)

Page 47: 5.1 Procedimientos y Funciones Almacenados. 5.2 ... ITD/Taller de Bases de Datos/Apuntes... · Taller Bases de Datos ... MySQL o la Línea de Comandos, en ... 6 1813 Fundamentos de

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 47

Pruebe el trigger del ejercicio 2 de la página

anterior para que se cambie la fecha.

En ese caso no debe producirse un mensaje

relativo a la justificación de la inasistencia, sino

a que se modificó la fecha de valor antiguo a

valor nuevo.

5.2 Disparadores (Triggers)