Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 16
Clase 16
136------------------------------------------------
IF DB_ID('EJEMPLO16') IS NOT NULL
BEGIN
DROP DATABASE EJEMPLO16
END
GO
CREATE DATABASE EJEMPLO16
GO
USE EJEMPLO16
GO
CREATE TABLE ARTICULOS(
CODART VARCHAR(6) PRIMARY KEY,
NOMART VARCHAR(50),
STOCK INT,
PRECIO NUMERIC(8,2)
)
GO
CREATE TABLE INGRESOS(
CODART VARCHAR(6),
FECHA DATE,
CANTIDAD INT,
PRECIO NUMERIC(8,2)
CONSTRAINT FK1 FOREIGN KEY (CODART) REFERENCES ARTICULOS
)
GO
CREATE TABLE CLIENTES (
CODCLI VARCHAR(6) PRIMARY KEY,
NOMCLI VARCHAR(50),
RUCCLI INT,
DIRECCION VARCHAR(50) DEFAULT 'DESCONOCIDA'
)
GO
CREATE TABLE BOLETAS(
NROBOL VARCHAR(10) PRIMARY KEY NONCLUSTERED,
CODCLI VARCHAR(6),
FECHA DATE,
TOTAL NUMERIC(8,2),
CONSTRAINT FK2 FOREIGN KEY (CODCLI) REFERENCES CLIENTES
)
GO
CREATE TABLE DETALLES(
NROBOL VARCHAR (10),
CODART VARCHAR (6),
CANTIDAD INT,
IMPORTE NUMERIC (8,2),
PRIMARY KEY NONCLUSTERED (NROBOL,CODART),
CONSTRAINT FK3 FOREIGN KEY (NROBOL) REFERENCES BOLETAS,
CONSTRAINT FK4 FOREIGN KEY (CODART) REFERENCES ARTICULOS
)
------------------------------------------------ACTIVIDAD
137------------------------------------------------:CREAR UN DISIPADOR QUE PERMITA
AGREGAR CLIENTES CON CODIGO CORRELATIVO (1,2,3)
GO
CREATE TRIGGER TRG_137
ON CLIENTES
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @RUC INT, @DIR VARCHAR (50)
SELECT @NOM=NOMCLI,@RUC = RUCCLI, @DIR = DIRECCION FROM inserted
SET @COD = (SELECT ISNULL(MAX(CODCLI),0) FROM CLIENTES) + 1
INSERT INTO CLIENTES VALUES (@COD, @NOM, @RUC, @DIR)
END
------------------------------------------------ACTIVIDAD
139------------------------------------------------MODIFICAR EL DISIPADOR ANTERIOR
PARA --VERIFICAR LA DUPLICIDAD DE PRODUCTOS DE SER ASI SE ACTUALIZARA EL STOCK
GO
ALTER TRIGGER TRG_138
ON ARTICULOS
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @STOCK INT, @PRECIO NUMERIC(8,2)
DECLARE @NEW_STOCK INT
SELECT @NOM=NOMART,@STOCK = STOCK, @PRECIO = PRECIO FROM inserted
IF EXISTS (SELECT NOMART FROM ARTICULOS WHERE NOMART = @NOM)
BEGIN
SET @NEW_STOCK = (SELECT STOCK FROM ARTICULOS WHERE NOMART =
@NOM)
SET @NEW_STOCK = @NEW_STOCK + @STOCK
UPDATE ARTICULOS SET STOCK = @NEW_STOCK WHERE NOMART = @NOM
END
ELSE
BEGIN
SET @COD = RIGHT ((SELECT ISNULL(MAX(CODART),'0') FROM
ARTICULOS),3) + 1
SET @COD = 'ART' + RIGHT ('000' + @COD,3)
INSERT INTO ARTICULOS VALUES (@COD, @NOM, @STOCK, @PRECIO)
END
END
------------------------------------------------ACTIVIDAD
140------------------------------------------------MODIFICAR EL DISIPADOR ANTERIOR
PARA REGISAR LOS INGRESOS DE LOS ARTICULOS COMO DATOS HISTORICOS
GO
ALTER TRIGGER TRG_138
ON ARTICULOS
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @STOCK INT, @PRECIO NUMERIC(8,2)
DECLARE @NEW_STOCK INT, @FECHA DATE
SELECT @NOM=NOMART,@STOCK = STOCK, @PRECIO = PRECIO FROM inserted
IF EXISTS (SELECT NOMART FROM ARTICULOS WHERE NOMART = @NOM)
BEGIN
SET @NEW_STOCK = (SELECT STOCK FROM ARTICULOS WHERE NOMART =
@NOM)
SET @NEW_STOCK = @NEW_STOCK + @STOCK
UPDATE ARTICULOS SET STOCK = @NEW_STOCK WHERE NOMART = @NOM
INSERT INTO INGRESOS VALUES (@COD,@FECHA,@STOCK,@PRECIO)
END
ELSE
BEGIN
SET @COD = RIGHT ((SELECT ISNULL(MAX(CODART),'0') FROM
ARTICULOS),3) + 1
SET @COD = 'ART' + RIGHT ('000' + @COD,3)
SET @FECHA = GETDATE()
INSERT INTO ARTICULOS VALUES (@COD, @NOM, @STOCK, @PRECIO)
INSERT INTO INGRESOS VALUES (@COD,@FECHA,@STOCK,@PRECIO)
END
END
------------------------------------------------ACTIVIDAD
141------------------------------------------------DISIPADOR QUE PERMITA EMITIR UN
BOLETA DE VENTAS CON CODIGO AUTOGENERADO VALIDANDO LA EXISTENCIA DEL CLIENTE Y
ASIGNANDO CERO AL VALOR POR DEFECTO DEL TOTAL DE LA BOLETA.
GO
CREATE TRIGGER TRG_141
ON BOLETAS
INSTEAD OF INSERT
AS
BEGIN
DECLARE @NRO VARCHAR (10), @CODCLI VARCHAR (8), @FEC DATE, @TOT NUMERIC (8,2)
SELECT @CODCLI = CODCLI FROM inserted
IF EXISTS (SELECT * FROM CLIENTES WHERE CODCLI = @CODCLI)
BEGIN
SET @TOT = 0
SET @NRO = RIGHT ((SELECT ISNULL(MAX(NRBOL),'0') FROM
BOLETAS),6)+1
SET @NRO = '001-'+RIGHT('000000'+@NRO,6)
SET @FEC = GETDATE()
INSERT INTO BOLETAS VALUES (@NRO,@CODCLI,@FEC,@TOT)
END
ELSE
BEGIN
SELECT 'EL CLIENTE NO EXISTE' AVSO
END
END
------------------------------------------------ACTIVIDAD
142------------------------------------------------PERMITA REGISTRAR UN DETALLE DE
VENTA VERIFICANDO
-- LA EXISTENCIA DEL NUMERO DE BOLETA
--LA EXISTENCIA DEL CODIO DE SUMINISTRO
--LA DISPONIBILDAD DE STOCK
--CALCULAR EL IMPORTE Y ACTUALIZAR EL STOCK DEL ARTICULO
GO
CREATE TRIGGER TRG_142
ON DETALLES
INSTEAD OF INSERT
AS BEGIN
DECLARE @NROBOL VARCHAR(10),@CODART VARCHAR(10),@CANTIDAD INT,@IMPORTE NUMERIC(8,2)
DECLARE @STOCK INT,@PRECIO NUMERIC(8,2)
SELECT @NROBOL=NROBOL FROM inserted
SELECT @CODART=CODART FROM inserted
SELECT @CANTIDAD=CANTIDAD FROM inserted
IF EXISTS (SELECT * FROM BOLETAS WHERE NRBOL=@NROBOL)
BEGIN
IF EXISTS (SELECT * FROM ARTICULOS WHERE CODART=@CODART)
BEGIN
SET @STOCK=(SELECT STOCK FROM ARTICULOS WHERE
CODART=@CODART)
IF(@CANTIDAD<=@STOCK)
BEGIN
SET @PRECIO=(SELECT PRECIO FROM ARTICULOS
WHERE CODART=@CODART)
SET @IMPORTE=(@PRECIO*@CANTIDAD)
INSERT INTO DETALLES VALUES
(@NROBOL,@CODART,@CANTIDAD,@IMPORTE)
UPDATE ARTICULOS SET STOCK=(STOCK-
@CANTIDAD) WHERE CODART=@CODART
UPDATE BOLETAS SET TOTAL=@IMPORTE WHERE
NRBOL=@NROBOL
END
ELSE
BEGIN
PRINT 'NO HAY STOCK SUFICIENTE'
END
END
ELSE
BEGIN
PRINT 'EL ARTICULO NO EXISTE'
END
END
ELSE
BEGIN
PRINT 'EL NUMERO DE BOLETA NO EXISTE'
END
END