Vous êtes sur la page 1sur 6

TRABAJO PRACTICO

ALUMNOS : MIGUEL ANGEL CALLE SANCHEZ EJERCICIO 1 CREAR UN PROCEDIMIENTO ALMACENADO PARA LISTAR TODOS LOS PRODUCTOS QUE COMPRO EL CLIENTE CL EN FECHA F. SOLUCION CREATE PROCEDURE JM @F DATETIME ,@CL VARCHAR (15) AS SELECT P.NOMBRE FROM VENTA V,DETALLE_VENTA VD,PRODUCTO P WHERE V.NRO=VD.NRO AND VD.CODPRO=P.CODPROD AND V.CI_CL=@CL AND V.FECHA=@F EXECUTE JM'1/1/2008','CL1' EJERCICIO 2 SI EL NUMERO DE VENTAS QUE ATENDIO EL CAJERO CAJ EXEDE A 2, INCREMENTAR SU SUELDO EN 100 BS. SOLUCION CREATE PROCEDURE AP @CAJ VARCHAR (15) AS DECLARE @X INTEGER SET @X=(SELECT COUNT (*)FROM VENTA WHERE CI_CA=@CAJ ) IF @X>2 UPDATE CAJERO SET SUELDO =SUELDO+100 WHERE CI=@CAJ EXECUTE AP 'CAL' SELECT *FROM CAJERO SELECT *FROM VENTA EJERCICIO 3 GENERAR EL CODIGO DE CLIENTE PREVIAMENTE CONVIRTIENDO EN MAYUSCULAS LOS NOMBRES SOLUCION CREATE PROCEDURE JM1 AS DECLARE @N VARCHAR (15),@P VARCHAR (15),@M VARCHAR (15),@CODIGO VARCHAR (15)

UPDATE CLIENTE SET NOMBRE=UPPER (NOMBRE ),PATERNO=UPPER (PATERNO),MATERNO =UPPER (MATERNO) DECLARE C_L CURSOR FOR SELECT NOMBRE, PATERNO, MATERNO FROM CLIENTE OPEN C_L FETCH C_L INTO @N,@P,@M WHILE (@@FETCH_STATUS =0 ) BEGIN SET @CODIGO =LEFT (@N,1 )+LEFT(@P,1)+LEFT (@M,1) PRINT 'EL CODIGO ES '+@CODIGO FETCH C_L INTO @N,@P,@M END DEALLOCATE C_L EXECUTE JM1 EJERCICIO 4 MODIFICAR LAS VENTAS INCREMENTANDO EN 10% DEL MES M SOLUCION ALTER PROCEDURE AP2 @MES INT AS DECLARE @F DATETIME DECLARE @NRO INT DECLARE @MS INT DECLARE C CURSOR FOR SELECT FECHA,NRO FROM VENTA OPEN C FETCH C INTO @F,@NRO WHILE (@@FETCH_STATUS=0) BEGIN SET @MS=MONTH (@F) IF(@MS=@MES) UPDATE VENTA SET MONTO=MONTO+MONTO*10/100 WHERE NRO =@NRO FETCH C INTO @F,@NRO END DEALLOCATE C SELECT *FROM VENTA EXECUTE AP2 SELECT *FROM AUXILIAR EJERCICIO 5 CREAR UNA TABLA AUXILIAR PARA REALIZAR UNA COPIA DE SEGURIDAD DE VENTAS DE FECHA F SOLUCION CREATE PROCEDURE JM5 @F DATETIME AS --DROP TABLE AUXCEL

CREATE TABLE AUXCEL( NRO INT NOT NULL, CI_CA VARCHAR(15), CI_CL VARCHAR (15), FECHA DATETIME, HORA DATETIME, MONTO FLOAT, ); INSERT INTO AUXCEL SELECT *FROM VENTA WHERE FECHA =@F EXECUTE JM5 '1/1/2008' SELECT *FROM AUXCEL EJERCICIO 6 DETERMINAR EL NOMBRE DEL CLIENTE QUE MAS COMPRO(EN MONTO) SOLUCION CREATE PROCEDURE JM6 AS DECLARE @MAX FLOAT DECLARE @NUM INT , @MONTO FLOAT SET @MAX=0 DECLARE C_3 CURSOR FOR SELECT NRO, MONTO FROM VENTA OPEN C_3 FETCH C_3 INTO @NUM , @MONTO WHILE (@@FETCH_STATUS=0) BEGIN IF(@MONTO > @MAX) SET @MAX =@MONTO FETCH C_3 INTO @NUM, @MONTO END DEALLOCATE C_3 DECLARE @NOM VARCHAR(15) DECLARE C_4 CURSOR FOR SELECT CL.NOMBRE ,V.MONTO FROM CLIENTE CL, VENTA V WHERE V.CI_CL=CL.CI OPEN C_4 FETCH C_4 INTO @NOM,@MONTO WHILE(@@FETCH_STATUS =0) BEGIN IF(@MONTO=@MAX) PRINT 'CLIENTE CON MAYOR COMPRA'+@NOM FETCH C_4 INTO @NOM,@MONTO END DEALLOCATE C_4 EXECUTE JM6 EJERCICIO 7 MEDIANTE TRANSACCIONES INSERTAR UNA NUEVA VENTA

SOLUCION CREATE PROCEDURE JM7 @N INT, @ND INT AS DECLARE @C INT BEGIN TRANSACTION SET @C=1 INSERT INTO VENTA (NRO)VALUES(@N) IF(@@ERROR<>0) GOTO FIN ELSE BEGIN WHILE (@C<=@ND) BEGIN INSERT INTO DETALLE_VENTA (NRO,NROD) VALUES (@N,@C) IF(@@ERROR <>0) GOTO FIN SET @C=@C+1 END END EJECUTA: PRINT 'SE EJECUTAN' COMMIT TRANSACTION FIN: PRINT 'SE DESARAN' ROLLBACK TRANSACTION EXECUTE JM7 11,2 SELECT *FROM DETALLE_VENTA SELECT *FROM VENTA

EJERCICIO 8 CREAR VISTA VENTA - CLIENTE SOLUCION CREATE VIEW JM8 AS SELECT CLI.NOMBRE, V.MONTO FROM VENTA V,CLIENTE CLI WHERE V.CI_CL=CLI.CI SELECT *FROM JM8 TRIGGERS ESTE TRIGGER IMPIDE INSERTAR CLIENTES QUE NO ESTEN REGISTRADOS EN TABLA CLIENTE CREATE TRIGGER JML_ACO_T1

ON VENTA FOR INSERT AS IF(SELECT COUNT (*)FROM CLEINTE,INSERTED WHERE CLIENTE.CI=INSERTED.CI_CL)<>@@ROWCOUNT BEGIN PRINT 'EL CLIENTE NO EXISTE EN EL REGISTRO' ROLLBACK TRANSACTION END ELSE BEGIN PRINT 'ADICIONANDO ,TODO CLIENTE EXISTE ' COMMIT TRANSACTION END SELECT * FROM VENTA UPDATE VENTA SET NRO=9 WHERE NRO=6 TRIGGERS VALIDACION PARA ACTUALIZACIONES DE FIN DE SEMANA SOLUCION CREATE TRIGGER JML_ACO_T2 ON VENTA FOR UPDATE AS IF UPDATE(NRO)AND DATENAME (DW,GETDATE())IN ('SABADO','DOMINGO') BEGIN PRINT 'NO PERMITE LOS CAMBIOS DE LLAVE PRIMARIA EN FIN DE SEMANA' ROLLBACK TRANSACTION END ELSE BEGIN PRINT 'SE PUEDE REALIZAR ACTUALIZACONES' PRINT DATENAME(DW,GETDATE()) END SELECT *FROM VENTA UPDATE VENTA SET NRO=9 WHERE NRO=6 TRIGGERS INSERTAR NUEVO REGISTRO CON UNA NUEVA CLAVE SOLUCION CREATE TRIGGER JML_ACO_T3 ON CLIENTE FOR INSERT AS DECLARE @NREGS INT SET @NREGS =0 SET @NREGS=(SELECT COUNT (*)FROM CLIENTE,INSERTED WHERE CLIENTE.CI=INSERTED.CI) PRINT 'ESTE ESL NRO DE REGISTRO'+CAST (@NREGS AS VARCHAR)

IF(@NREGS>1) BEGIN PRINT 'YA EXISTE ESTE REGISTRO CON ESE CODIGO ' ROLLBACK TRANSACTION END ELSE BEGIN PRINT 'INSERCION SATISFACTORIA' COMMIT TRANSACTION END SELECT *FROM CLIENTE INSERT INTO CLIENTE VALUES('CL3','PEREZ','LIMA','YENNY',111)

Vous aimerez peut-être aussi