Vous êtes sur la page 1sur 14

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

Ejemplo para trigger INSERT. Crear las siguientes tablas Clientes y PruebaTrigger.
CREATE TABLE CLIENTES (RUT NOMBRES FECHANACIMIENTO

CHAR(12) PRIMARY KEY, VARCHAR(100) NOT NULL, DATE )

CREATE TABLE PRUEBATRIGGER (RUT CHAR(12) PRIMARY KEY, VALOR NUMERIC)

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

Al ingresar un cliente en la tabla cliente, se deber insertar un registro en la tabla PRUEBATRIGGER:

CREATE TRIGGER TR_INSERTPRUEBA ON CLIENTES AFTER INSERT AS

BEGIN
INSERT INTO PRUEBATRIGGER SELECT INSERTED.RUT ,0 FROM INSERTED

END

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

Ejecutamos la sentencia Insert en tabla clientes


INSERT INTO CLIENTES VALUES('5-3','LOLA ROJAS,'19860405') ____________________________________________________________________

Resultado: Revisamos ambas tablas


SELECT * FROM PRUEBATRIGGER RUT Valor ------------ ----------------------5-3 0 ____________________________________________________________________ SELECT * FROM CLIENTES RUT NOMBRES FECHANACIMIENTO

------------ ---------------------------------------------------------------------------------------------------5-3 LOLA ROJAS 1986-04-05

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

Ejecutamos la sentencia Insert en tabla clientes


INSERT INTO CLIENTES VALUES('1-9','LUIS LOPEZ','19780312) ____________________________________________________________________

Resultado: Revisamos ambas tablas


SELECT * FROM PRUEBATRIGGER RUT Valor ------------ ----------------------5-3 0 1-9 0 ____________________________________________________________________ SELECT * FROM CLIENTES

RUT

NOMBRES

FECHANACIMIENTO

------------ ---------------------------------------------------------------------------------------------------5-3 LOLA ROJAS 1986-04-05

1-9

LUIS LOPEZ

1978-03-12

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

Ejecutamos la sentencia Delete en tabla clientes DELETE FROM CLIENTES WHERE RUT ='5-3 __________________________________________________________________

Resultado: Revisamos ambas tablas

SELECT * FROM PRUEBATRIGGER WHERE RUT ='5-3

RUT

Monto

------------ ---------------(0 row(s) affected) __________________________________________________________________ SELECT * FROM CLIENTES WHERE RUT ='5-3 RUT NOMBRES FECHANACIMIENTO

------------ -------------------------------------------------------------------------------------------------(0 row(s) affected)

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

El mismo ejemplo anterior controlando la existencia de registros en la tabla PRUEBATRIGGER

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

/*DELETE PRUEBATRIGGER WHERE PRUEBATRIGGER.RUT = (select DELETED.RUT from DELETED)*/


END END

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

Resultado Trigger:
Create Trigger TR_ventas_insertar ON ventas FOR INSERT As

Declare @stock int


Select @stock = stock From libros Inner join inserted on inserted.codigolibro= libros.codigo Where libros.codigo = inserted.codigolibro

if (@stock >= (Select cantidad From Inserted))

Update Libros Set stock=stock - inserted.cantidad


From libros Inner join inserted on inserted.codigolibro = libros.codigo Where codigo = inserted.codigolibro

UNIVERSIDAD UCINF

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

FACULTAD DE INGENIERA CARRERAS TECNICAS

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

Revisar tabla Ventas

select * from ventas where codigolibro = 5


Numero Fecha CodigoLibro Cantidad

Vous aimerez peut-être aussi