Académique Documents
Professionnel Documents
Culture Documents
Ejemplo para trigger INSERT. Crear las siguientes tablas Clientes y PruebaTrigger.
CREATE TABLE CLIENTES (RUT NOMBRES FECHANACIMIENTO
UNIVERSIDAD UCINF
BEGIN
INSERT INTO PRUEBATRIGGER SELECT INSERTED.RUT ,0 FROM INSERTED
END
UNIVERSIDAD UCINF
UNIVERSIDAD UCINF
El mismo ejemplo anterior controlando la existencia de registros en la tabla PRUEBATRIGGER CREATE TRIGGER TR_INSERTPRUEBACONTROL ON CLIENTES AFTER INSERT AS
BEGIN
IF NOT EXISTS( SELECT 1
FROM INSERTED
INNER JOIN PRUEBATRIGGER ON INSERTED.RUT = PRUEBATRIGGER.RUT) BEGIN INSERT INTO PRUEBATRIGGER SELECT INSERTED.RUT ,0 FROM INSERTED END END
UNIVERSIDAD UCINF
RUT
NOMBRES
FECHANACIMIENTO
1-9
LUIS LOPEZ
1978-03-12
UNIVERSIDAD UCINF
DELETE
Ejemplo para aplicar un trigger en la instruccin delete de la tabla CLIENTE. Al eliminar un registro de la tabla cliente, se deber eliminar el cliente de la tabla PRUEBATRIGGER
CREATE TRIGGER TR_DELETE ON CLIENTES AFTER DELETE AS BEGIN DELETE PRUEBATRIGGER FROM PRUEBATRIGGER ,DELETED WHERE PRUEBATRIGGER.RUT = DELETED.RUT /*DELETE MOVIMIENTOS WHERE MOVIMIENTOS.RUT = (SELECT DELETED.RUT FROM DELETED)*/ END :
UNIVERSIDAD UCINF
Ejecutamos la sentencia Delete en tabla clientes DELETE FROM CLIENTES WHERE RUT ='5-3 __________________________________________________________________
RUT
Monto
------------ ---------------(0 row(s) affected) __________________________________________________________________ SELECT * FROM CLIENTES WHERE RUT ='5-3 RUT NOMBRES FECHANACIMIENTO
UNIVERSIDAD UCINF
CREATE TRIGGER TR_DELETECONTROL ON CLIENTES AFTER DELETE AS BEGIN IF EXISTS(SELECT 1 FROM DELETED INNER JOIN PRUEBATRIGGER ON DELETED.RUT = PRUEBATRIGGER.RUT) BEGIN DELETE PRUEBATRIGGER FROM PRUEBATRIGGER ,DELETED WHERE PRUEBATRIGGER.RUT = DELETED.RUT
UNIVERSIDAD UCINF
Ejercicio: Crear las siguientes tablas e insertar los registros que siguen a continuacin: Create Table Libros(
Codigo Titulo Autor Precio Stock int primary key, varchar (40), varchar (30), decimal (6,2), int)
Create Table Ventas( Numero int not null, Fecha date, Codigolibro int not null, Precio decimal (6,2), Cantidad int) insert into libros values (1,'Uno','Richard Bach',15,100); insert into libros values (2,'Ilusiones','Richard Bach',18,50); insert into libros values (3,'El aleph','Borges',25,200); insert into libros values (4,'Aprenda PHP','Mario Molina',45,200); insert into libros values (5,'Sin stock','Mts',45,0);
UNIVERSIDAD UCINF
Ejercicios
Crear un SP que registre la venta de libros y controle el stock por medio de un trigger. Especificaciones para el SP: Deber recibir como parmetro el cdigo de libro y la cantidad. Validar si existe libro La fecha de venta debe ser la del da Vaidar si hay cantidad de stock suficiente del libro a vender, si no lo hay emitir mensaje por pantalla (print). Utilizar Control de errores Begin..Catch Especificaciones para el TR Por cada venta registrada (insert en la tabla ventas), se deber actualizar el stock de la tabla Libros, se sugiere realizar lo siguiente: SI la cantidad de libros a vender (cantidad de tabla ventas a insertar), es menor que el stock, este valor deber ser actualizado en la tabla Libros.
UNIVERSIDAD UCINF
Resultado Trigger:
Create Trigger TR_ventas_insertar ON ventas FOR INSERT As
UNIVERSIDAD UCINF
Resultado SP:
Create Proc Sp_VentasLibros( @Codigolibro int , @Cantidad int) As Begin Begin try If Not Exists(Select Codigo From Libros) Begin Print 'No existe libro a vender' return End If Not Exists(Select 1 From Libros Where Codigo = @codigolibro And Stock >= @Cantidad) Begin Print 'No existe Stock suficiente para libro a vender' return End Insert into ventas values (getdate(),@codigolibro,@Cantidad) End Try Begin Catch Print 'Error en las venta de libros' End catch End
UNIVERSIDAD UCINF
Ejecutando el ejercicio:
Venta : 2 Cantidades para el libro 1 (1,'Uno','Richard Bach',15,100)
Exec Sp_VentasLibros 1,2
Revisar tabla Libros select * from libros where codigo = 1 Codigo Titulo Libro Precio Stock
1 Uno
Richard Bach
15.00
98
Revisar tabla Ventas select * from ventas where codigolibro = 1 Numero Fecha 1 2013-10-19 CodigoLibro Cantidad 1 2
UNIVERSIDAD UCINF
Ejecutando el ejercicio:
Venta : 1 Cantidad para el libro 5 (5,'Sin stock','Mts',45,0)
Exec Sp_VentasLibros 5,1 No existe Stock suficiente para libro a vender
Revisar tabla Libros select * from libros where codigo = 5 Codigo Titulo 5 Sin stock Mts Libro Precio 45.00 Stock 0