triggers

6
Trigger Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla y se activa cuando ocurre un evento en particular para esa tabla. El disparador queda asociado a la tabla "nombre de la tabla" y no puede ser una vista. El momento en que el disparador entra en acción puede ser antes o después que la sentencia lo activa. Existe un evento que activa al disparador que puede ser un insert, update o delete. No puede haber 2 disparadores en una misma tabla que corresponden al mismo momento y sentencia. Sintaxis: create trigger <nombre> before/after insert/delete/update on nombre tabla for each row begin (accion que se va a realizar) end; Ejemplo: delimiter / create trigger tr_ventasInsert after insert on ventas for each row begin update productos set stock = stock-new.cantidad where IdProductos = new.ProductoId; end / delimiter; #insert into ventas(id, idProducto, cantidad) values('1',1,2) #insert into ventas values(1,3,20)

Upload: zoraida-vallejo

Post on 14-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Ejercicios de disparadores c#Ejemplios resueltosSecciones y empleadosREGISTROS EN UN CLUBfruteriaSesion

TRANSCRIPT

Page 1: Triggers

Trigger Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla y se activa cuando ocurre un evento en particular para esa tabla. El disparador queda asociado a la tabla "nombre de la tabla" y no puede ser una vista. El momento en que el disparador entra en acción puede ser antes o después que la sentencia lo activa. Existe un evento que activa al disparador que puede ser un insert, update o delete. No puede haber 2 disparadores en una misma tabla que corresponden al mismo momento y sentencia. Sintaxis: create trigger <nombre> before/after insert/delete/update on nombre tabla for each row begin (accion que se va a realizar) end; Ejemplo: delimiter / create trigger tr_ventasInsert after insert on ventas for each row begin update productos set stock = stock-new.cantidad where IdProductos = new.ProductoId; end / delimiter; #insert into ventas(id, idProducto, cantidad) values('1',1,2) #insert into ventas values(1,3,20)

Page 2: Triggers

Trigger Delete

delimiter | create trigger tr_ventasDelete after delete on ventas for each row begin update productos set stock = stock - old.cantidad where IdProductos = old.ProductoId; end | delimiter ; Trigger Update

delimiter | create trigger tr_ventasUpdate after update on ventas for each row begin if(old.Cantidad > new.Cantidad) then update productos set Stock= Stock + (old.Cantidad - new.Cantidad) where IdProductos = old.ProductoId; else update productos set Stock = Stock - (new.Cantidad - old.Cantidad) where IdProductos = old.ProductoId; end if; end | delimiter ;

Trigger Insert delimiter | create trigger tr_ventasInsert before insert on ventas for each row begin select stock into @stock from productos where IdProductos = new.ProductoId; if (new.cantidad <= @stock) then update productos set stock = stock-new.cantidad where IdProducto = new.ProductoId; set new.Estado = "EXITOSA"; else if (@stock = 0) then set new.cantidad = 0; set newproductos.Estado = "NO EXITOSA"; else update productos set stock = 0 where IdProducto = new.ProductoId; set new.Cantidad = @stock; set new.Estado = "EXITOSA"; end if; end if; end | delimiter ;

Page 3: Triggers

Secciones y empleados New sueldo = 500 Old sueldo 400

Trigger Delete

delimiter | create trigger tr_DeleteEmpleado before delete on empleados for each row begin update secciones set NoEmpleados=NoEmpleados -1 where Codigo=old.CodigoSeccion; end; | delimiter ; Trigger Insert

delimiter | create trigger tr_InserEmpleado before insert on empleados for each row begin select sueldoMax into @sueldoMax from secciones where Codigo=new.CodigoSeccion; update secciones set noEmpleados=noEmpleados+1 where Codigo=new.codigoSeccion; if(new.sueldo>@sueldoMax) then set new.sueldo=@sueldoMax; set new.Diferencia=0; else if(new.sueldo<@sueldoMax) then set [email protected]; end if; end if; end | delimiter ;

Trigger Update

delimiter | create trigger tr_InserEmpleado before insert on empleados for each row begin select sueldoMax into @sueldoMax from secciones where Codigo=new.CodigoSeccion; if(new.sueldo>@SueldoMax) then set new.sueldo=@sueldoMax; set new.Diferencia=0; else if(new.sueldo<@sueldoMax) then set [email protected]; end if ; end if; if(new.CodigoSeccion!=old.CodigoSeccion) then update secciones set NoEmpleados=NoEmpleados -1 where Codigo=old.CodigoSeccion; update secciones set NoEmpleados=NoEmpleados + 1 where Codigo=new.CodigoSeccion; end if; end | delimiter ;

EMPLEADOS IdEmpleados CodigoSeccion Nombre Domicilio Sueldo

SECCION Codigo Nombre SueldoMax NoEmpleados

Page 4: Triggers

REGISTROS EN UN CLUB

Trigger Update

create trigger tr_UpdateRegistro before update on registro for each row begin select Costo into @Costo from club where Nombre=new.Club; if(new.Inscrito="N") then update club set MontoTotal = MontoTotal-@Costo where Nombre=new.Club; insert into morosos(Fecha, Deuda, RFC) values (now(), @Costo, new.RFC); else update club set MontoTotal = MontoTotal+@Costo where Nombre=new.Club; delete from morosos where RFC=new.RFC and Deuda=@Costo; end if; end;

Trigger Insert create trigger tr_InserEmpleado

before insert on empleados

for each row begin

select Costo into @Costo from club

where Nombre=new.Club;

if(new.Inscrito="N") then

insert into morosos(Fecha, Deuda, RFC)

values (now(), @Costo, new.RFC);

else

update

club set MontoTotal = MontoTotal+@Costo

where Nombre=new.Club;

end if;

end;

Page 5: Triggers

fruteria Crear un trigger para la base de datos frutería.

Para almacenar las comisiones recibidas por día hechas por los vendedores de la frutería, de tal manera que cada

vez que realice una venta recibirá una comisión que se verá reflejada en la tabla comisiones.

Si la venta es mayor a 500 pesos, la comisión será del 10%

Si la venta es menor la comisión será del 3% de lo vendido.

Nota: hay que tener en cuenta que el vendedor realizara más de una venta, por lo cual implica que en la tabla

de comisiones ya existe la comisión para ese día.

Trigger Insert delimiter | create trigger tr_InsertVenta from ventas after for each row begin select precio * new.Kilos into @ventas from venta where new.codproducto=idproducto; select count(*) into @dia from comisiones where fecha=new.fecha and idvendedor=new.CodVendedor; if(@venta > 500) then set @comision=@ventas*0.1 else set @comision=@ventas*.03 end if; if(@dia =1)then update comisiones set new.comision = @comision + comision where idvendedor = new.CodVendedor; else insert into comisiones values (new.CodVendedor, new.fecha, @comision) end if; end | delimiter ;

Page 6: Triggers

Sesion Historial Datos (Nombre, Contraseña) Fecha Movimiento

Para encriptar contraseñas md5()

select * from usuario where contraseña = md5('Juan')

Encriptar y guardar en el historial los movimientos que se realizaron junto con los dato y la hora que se realizó.

Trigger Insert

delimiter | create trigger tr_insertUsuario before insert on usuario for each row begin set new.contraseña=md5(new.contraseña); insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",new.nombre,"CONTRASEÑA:", new.contraseña), now(), "INSERTADO"); end | delimiter ; Trigger Update

delimiter | create trigger tr_UpdateUsuario before update on usuario for each row begin

set new.nombre=old.nombre; set new.contraseña=md5(new.contraseña); insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",old.nombre,"CONTRASEÑA:", new.contraseña), now(), "MODIFICADO"); end | delimiter ; Trigger Delete

delimiter | create trigger tr_DeleteUsuario before delete on usuario for each row begin insert into historial (datos, fecha, movimiento) values (concat("NOMBRE:",old.nombre," CONTRASEÑA:", old.contraseña), now(), "ELIMINADO"); end | delimiter ;

Usuario Nombre Contraseña