Академический Документы
Профессиональный Документы
Культура Документы
DATOS
Cdigo
Apellidos y Nombres
Fecha
Nota
010200865d
Romero Chalco Juan Carlos
19/03/2015
Crear la BD dboFerreteria y hacer correr el siguiente script SQL. (Debe modificar las tablas
que requieran actualizaciones en cascada)
CREATE DATABASE BDdboFerreteria
GO
USE BDdboFerreteria
GO
CREATE TABLE cliente
(
CodCliente CHAR(4) PRIMARY KEY,
nomCliente CHAR(30),
fechaNacimientoCliente DATETIME,
)
CREATE TABLE producto
(
codProducto CHAR(4) PRIMARY KEY,
nomProducto CHAR(40),
descripcionProducto CHAR(40),
precioProducto MONEY,
stock int not null
)
CREATE TABLE recibo
(
numRecibo CHAR(5) PRIMARY KEY,
fechaRecibo DATETIME,
CodCliente CHAR(4),
FOREIGN KEY (CodCliente) REFERENCES cliente
ON UPDATE CASCADE,
)
CREATE TABLE lineaDeRecibo
(
numLineaDeRecibo INT PRIMARY KEY,
cantidad DECIMAL(10,2),
codProducto CHAR(4),
numRecibo CHAR(5),
FOREIGN KEY (codProducto) REFERENCES producto,
FOREIGN KEY (numRecibo) REFERENCES recibo
ON UPDATE CASCADE
)
--INSERTAR REGISTROS.
INSERT INTO cliente
VALUES('0001','PREZ, JOS','10/04/1960')
INSERT INTO cliente
VALUES('0002','TORRES, RINA','25/12/1963')
INSERT INTO cliente
VALUES('0003','SALAS, ROSA','10/04/1959')
INSERT INTO cliente
VALUES('0004','GAMARRA, OLIVER','08/12/1982')
INSERT INTO cliente
VALUES('0005','ROMERO, ALICIA','24/12/1981')
INSERT INTO cliente
VALUES('0006','ROJAS, JOAQUN','26/11/1980')
INSERT INTO cliente
VALUES('0007','RICALDE, REBECA','04/04/1985')
--2.1.Desarrollar una vista que muestre el nombre del cliente, numero recibo,
--la fecha del recibo, el cdigo del producto, el nombre del producto, descripcin del
producto,
-- precio del producto, stock y la cantidad vendida del producto. 2p
GO
CREATE VIEW REPORTE_CLIENTE
AS
SELECT c.nomCliente, r.numRecibo, r.fechaRecibo, l.codProducto,
p.descripcionProducto, p.precioProducto, p.stock, l.cantidad
FROM cliente c
INNER JOIN recibo r on c.CodCliente = r.CodCliente
INNER JOIN lineaDeRecibo l on l.numRecibo = r.numRecibo
INNER JOIN producto p on l.codProducto = p.codProducto
GO
SELECT * FROM REPORTE_CLIENTE;
--2.2.Por medio de la vista muestre la total pagado por recibo. 3p
GO
CREATE VIEW TOTAL_RECIBO
AS
SELECT l.numRecibo ,SUM(l.cantidad) AS Total
FROM lineaDeRecibo l
GROUP BY l.numRecibo
GO
SELECT * FROM TOTAL_RECIBO;
--2.3.Por medio de la vista ingresar registros a la tabla Producto. 2p
CREATE VIEW ADD_PRODUCTO
AS
SELECT codProducto, nomProducto, descripcionProducto, precioProducto, stock
FROM producto
GO
INSERT INTO ADD_PRODUCTO (codProducto, nomProducto, descripcionProducto,
precioProducto, stock )
VALUES ('P025','PRODUCTO1','UNIDAD',500.00,7)
GO
SELECT * FROM producto;
--2.4.
Por medio de la vista mostrar a los nombres de los clientes que
compraron ms de una vez en la Tienda. 3p
GO
CREATE VIEW COMPRA_MAS_UNO
AS
SELECT COUNT(r.numRecibo) AS Compras, r.CodCliente AS Cliente FROM recibo r
GROUP BY r.CodCliente
HAVING (COUNT(r.numRecibo) > 1)
GO
SELECT * FROM COMPRA_MAS_UNO
GO
--2.5.
Crear una funcin que permita determinar la edad de los clientes, al
momento de hacer una compra. 3p
CREATE FUNCTION FUNCION_EDAD
(@fecha VARCHAR(20))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @nombre varchar(20)
SET @nombre=
2015-datename(year,@fecha)
RETURN @nombre;
END;
---SELECT dbo.FUNCION_EDAD(p.fechaRecibo)AS EDAD_CLIENTES,c.nomCliente AS
NOMBRE_CLIENTE
FROM cliente c
INNER JOIN recibo p
ON c.CodCliente=p.CodCliente;
--2.6.
Desarrollar una consulta que me permita mostrar los datos del cliente, su
edad actual y la edad que tena cuando
---realizo una compra por medio de la funcin. 2p
SELECT c.nomCliente,2015-year(c.fechaNacimientoCliente)AS EDAD_ACTUAL,
dbo.FUNCION_EDAD(p.fechaRecibo) AS EDAD_COMPRA
FROM cliente c
INNER JOIN recibo p ON c.CodCliente=p.CodCliente;
--2.7.
Desarrollar un disparador que me permita controlar el stock de los
productos, teniendo en consideracin que en
---ningn caso los productos pueden llegar a tener menos de 7 unidades en su stock.
5p
create trigger STOCK_PRODUCTOS
ON lineaDeRecibo
FOR
INSERT
AS
DECLARE @stock int
SELECT @stock= stock FROM producto
JOIN inserted
ON inserted.codProducto=producto.codProducto WHERE
producto.codProducto=inserted.codProducto
IF (@stock>=(SELECT cantidad FROM inserted)OR @stock>=7)
update producto SET stock=stock-inserted.cantidad
FROM producto
JOIN inserted
ON inserted.codProducto=producto.codProducto WHERE
producto.codProducto=inserted.codProducto
ELSE
BEGIN
RAISERROR ('ESCASOS PRODUCTOS EN STOCK', 16, 1)
ROLLBACK TRANSACTION
end
INSERT INTO lineaDeRecibo VALUES(15,8000,'P001','R0007')
SELECT * FROM lineaDeRecibo;