Está en la página 1de 9

/*

NOMBRE: ALEX CARDONA CHAVEZ REG:210054484


TAREA LAB2

*/

-- Crear la Base de Datos denominada "preventas"


create database preventas

-- Seleccionamos la Base de Datos "preventas"


use preventas

-- Ctear la tabla de Proveedores


create table prov
(
cprv integer not null primary key, -- Codigo del Proveedor
nomb char(40) not null, -- Nombre del Proveedor
ciud char(2) not null -- Ciudad del Proveedor
);

-- Ctear la tabla de Almacenes


create table alma
(
calm integer not null primary key, -- Codigo del Almacen
noma char(40) not null, -- Nombre del Almacen
ciud char(2) not null -- Ciudad del Almacen
);

-- Ctear la tabla de Productos


create table prod
(
cprd integer not null primary key, -- Codigo Producto
nomp char(40) not null, -- Nombre del Producto
colo char(15) not null -- Color del Producto
);

-- Ctear la tabla de Suministro


create table sumi
(
cprv integer not null, -- Codigo del Proveedor
calm integer not null, -- Codigo del Almacen
cprd integer not null, -- Codigo del Producto
ftra date not null, -- Fecha del suministro
cant decimal(12,2) not null, -- Cantidad suministrada del producto
prec decimal(12,2) not null, -- Precio del Producto
impt decimal(12,2) not null, -- Importe
foreign key(cprv) references prov,
foreign key(calm) references alma,
foreign key(cprd) references prod
);

-- Crear la tabla de Pre-Ventas


create table pventas
(
nvta integer not null, -- Numero de pre venta
nomc char(40) not null, -- nombre del cliente
calm integer not null, -- codigo del almacen
ftra date not null, -- fecha de pre venta
itot decimal(12,2) not null, -- Importe total de la pre venta
ides decimal(12,2) not null, -- Importe descuento de la pre venta
primary key(nvta) ,
foreign key(calm) references alma
)
-- Crear la tabla de Detalle de la Pre-Ventas
create table dventas
(
nvta integer not null, -- Numero de la pre venta
cprd integer not null, -- codigo del producto
cant decimal(12,2) not null, -- cantidad
prec decimal(12,2) not null, -- precio
impt decimal(12,2) not null, -- importe
primary key(nvta ,cprd) ,
foreign key(nvta) references pventas,
foreign key(cprd) references prod
)

-- Crear la tabla bitacora de transacciones del la Pre-Ventas

create table log_pventas


(
ntra integer identity (1,1), -- Numero secuencial
nvta integer not null, -- Numero de la pre venta
ftra datetime not null, -- fecha y hora
usua char(15) not null, -- usuario
tipo char(1) not null, -- Tipo de operacion (I=insert,
U=update,D=delete)
primary key(ntra),
foreign key(nvta) references pventas,
)

insert into prov values(1,'PROV1','CB')


insert into prov values(2,'PROV2','LP')
insert into prov values(3,'PROV3','SC')
insert into prov values(4,'PROV4','SC')

insert into alma values(1,'ALM1','CB')


insert into alma values(2,'ALM2','SC')
insert into alma values(3,'ALM3','LP')
insert into alma values(4,'ALM3','SC')

insert into prod values(1,'PRD1','ROJO')


insert into prod values(2,'PRD2','VERDE')
insert into prod values(3,'PRD3','CAFE')
insert into prod values(4,'PRD4','ROJO')
insert into prod values(5,'PRD5','AZUL')

insert into sumi values(1,3,1,'1/1/2013',20,5,100)


insert into sumi values(1,2,1,'10/2/2013',10,5,50)
insert into sumi values(1,2,3,'10/1/2013',80,2,160)
insert into sumi values(3,2,3,'5/3/2013',10,2,20)
insert into sumi values(3,1,3,'12/4/2013',40,2,80)
insert into sumi values(1,1,1,'1/1/2012',2,4,8)
insert into sumi values(1,2,1,'02/2/2012',100,5,500)
insert into sumi values(1,2,2,'11/12/2012',40,2,80)
insert into sumi values(3,3,3,'10/3/2014',1,2,2)
insert into sumi values(3,1,2,'12/4/2014',25,2,50)
insert into sumi values(3,1,4,'12/6/2014',15,3,45)
insert into sumi values(4,4,1,'12/6/2014',10,5,50)
insert into sumi values(4,4,2,'12/6/2014',5,2,10)

INSERT INTO pventas VALUES(1,'CLIENTE A', 1, GETDATE(),100, 0)


INSERT INTO pventas VALUES(2,'CLIENTE B', 1, GETDATE(),200, 0)
INSERT INTO pventas VALUES(3,'CLIENTE L', 1, GETDATE(),200, 0)
INSERT INTO pventas VALUES(4,'CLIENTE D', 4, GETDATE(),300, 0)
INSERT INTO pventas VALUES(5,'CLIENTE E', 3, GETDATE(),100, 0)
INSERT INTO pventas VALUES(6,'CLIENTE F', 2, GETDATE(),50, 0)
INSERT INTO pventas VALUES(7,'CLIENTE G', 4, GETDATE(),90, 0)
INSERT INTO pventas VALUES(8,'CLIENTE H', 3, GETDATE(),10, 0)
INSERT INTO pventas VALUES(9,'CLIENTE I', 2, GETDATE(),40, 0)
INSERT INTO pventas VALUES(10,'CLIENTE J', 2, GETDATE(),60, 0)
INSERT INTO pventas VALUES(11,'CLIENTE K', 4, GETDATE(),100, 0)

INSERT INTO dventas VALUES(1,1,5,10,50)


INSERT INTO dventas VALUES(1,2,10,5,50)
INSERT INTO dventas VALUES(2,4,48,30,50)
INSERT INTO dventas VALUES(3,5,8,45,50)
INSERT INTO dventas VALUES(5,5,27,45,50)
INSERT INTO dventas VALUES(5,5,90,45,50)
INSERT INTO dventas VALUES(6,3,15,20,50)
INSERT INTO dventas VALUES(7,2,10,5,50)
INSERT INTO dventas VALUES(9,1,5,5,50)
INSERT INTO dventas VALUES(10,5,10,45,50)

select * from prod


select * from prov
select * from alma
select * from sumi
select * from pventas where pventas.calm=5;
select * from dventas

create function PA_ValidarPreVenta (@nvta int)


returns char(20)
begin
declare @var char(20)='Su compra fue exitosa'
declare @va1 int
select @va1=pventas.calm from pventas where pventas.nvta=@nvta

end

--1. Crear la Base de Datos "preventas" usando el Esquema Fisico de la


Base de Datos preventa

--2. Elabora los siguientes Procedimientos Almacenados en la Base de


Datos preventas
--1. Hacer un PA denominado PA_Setear, donde declare variables de tipo
Fecha, Entero, Real y Cadena, inicializarlas y mostrar su valor
ALTER PROCEDURE PA_Setear
@fecha DATE='18/04/2018',
@entero INT=359,
@decimal DECIMAL(12,2)=125.3333,
@cadena CHAR(10)='Listo'
AS
BEGIN
PRINT '@fecha= '+CAST(@fecha AS CHAR(20))
PRINT '@entero= '+CAST(@entero AS CHAR(20))
PRINT '@decimal= '+CAST(@decimal AS CHAR(20))
PRINT '@cadena= '+@cadena
END
-- Ejecutar el PA
EXEC PA_Setear
--2. Hacer un PA denominado PA_Igual, en la que se le pasan 2 nmeros y
retorne 1 si son iguales, 0 si no lo son
CREATE PROCEDURE PA_Igual(@va1 DECIMAL(12,2),@va2 DECIMAL(12,2),@res
CHAR(20)OUTPUT)
AS
BEGIN
SET @res='Son Distintos'
IF @va1=@va2
BEGIN
SET @res='Son Iguales'
END
END
-- Ejecutar el PA
DECLARE @a CHAR(20)=''
EXECUTE PA_Igual 2,4, @a OUTPUT
PRINT @a

--3. Hacer un PA denominado PA_Nombre, que reciba como par᭥tro su


<nombre> y muestre un mensaje "Hola <nombre>"
CREATE PROCEDURE PA_Nombre(@nom CHAR(20)OUTPUT)
AS
BEGIN
SET @nom='Hola '+@nom;
END
-- Ejecutar el PA
DECLARE @va1 CHAR(10)='Alex'
EXEC PA_Nombre @va1 OUTPUT
PRINT @va1
c
--4. Hacer un PA denominado PA_GetProv, que reciba como par᭥tro el co del
proveedor y retorne la ciudad donde vive el proveedor.
CREATE PROC PA_GetProv(@xcodp INT,@xciudad CHAR(20) OUTPUT)
AS
BEGIN
SELECT @xciudad=prov.ciud FROM prov WHERE prov.cprv=@xcodp;
END
-- Ejecutar el PA
DECLARE @ciudad CHAR(20)='Proveedor no existe'
EXEC PA_GetProv 100,@ciudad OUTPUT
PRINT @ciudad
--5. Hacer un PA denominado PA_ExisteProducto, que reciba como par᭥tro el
co del producto y retorne 1 si existe el producto de lo contrario retorne
0.
CREATE FUNCTION PA_ExisteProducto(@xcodp INT)
RETURNS CHAR(2)
AS
BEGIN
DECLARE @res CHAR(2)='0'
IF @xcodp IN(SELECT prod.cprd FROM prod)
BEGIN
SET @res='1'
END
RETURN @res
END
-- Ejecutar el PA
DECLARE @res1 CHAR(2)
EXEC @res1=PA_ExisteProducto 100
PRINT @res1
--6. Hacer un PA denominado PA_LeerProducto, que reciba como par᭥tro el
co del producto y retorne nombre y el color del producto si el co del
cc
producto introducido es valido, de lo contrario debe retornar nulo para
ambos casos.
ALTER FUNCTION PA_LeerProducto(@xcodp INT)
RETURNS CHAR(20)
AS
BEGIN
DECLARE @cont CHAR(20)='NULL'
DECLARE @va1 CHAR(5),@va2 CHAR(5)
IF @xcodp IN ((select prod.cprd from prod))
BEGIN
SELECT @va1=prod.nomp FROM prod WHERE prod.cprd=@xcodp
SELECT @va2=prod.colo FROM prod WHERE prod.cprd=@xcodp
SET @cont=@va1+@va2;
END
RETURN @cont
END
-- Ejecutar el PA
DECLARE @R CHAR(20)=''
EXEC @R=PA_LeerProducto 2
PRINT @R
c
--7. Hacer un PA denominado PA_TotalStock que reciba como par᭥tro el co
del producto y retorne el TotalStock existente del producto. (El stock es
la sumatoria de cantidades suministrada del producto).
CREATE PROCEDURE PA_TotalStock(@xcprd INT, @stock DECIMAL OUTPUT)
AS
SELECT @stock=isnull(sum(cant),0) FROM sumi
WHERE cprd=@xcprd
RETURN
-- Ejecutar el PA
DECLARE @xresul DECIMAL
EXECUTE PA_TotalStock 1,@xresul OUTPUT
PRINT @xresul
c
--8. Hacer un PA denominado PA_HayStock que reciba como par᭥tro el co del
producto y que retorne 1 si hay Stock disponible, de lo contrario que
retorne 0.
CREATE PROCEDURE PA_HayStock (@xcprd INT, @resul INT OUTPUT)
AS
DECLARE @xStock DECIMAL
SET @resul=0
EXECUTE PA_TotalStock @xcprd, @xStock OUTPUT
IF @xStock>0 SET @resul=1
RETURN

-- Ejecutar el PA

DECLARE @xresul INT


EXECUTE PA_HayStock 6, @xresul OUTPUT
PRINT @xresul
c--9. Hacer un PA denominado PA_StockxAlmacen que reciba el co del
cproducto y el co del almac 鮬 y que retorne el Stock existente del producto
en el almac 鮮 (El stock es la sumatoria de cantidades suministrada del
producto en un determinado almac 鮩.
CREATE PROCEDURE PA_TotalStockxAlmacen(@xcprd INT, @xcalm INT,@stock
DECIMAL OUTPUT)
AS
SELECT @stock=isnull (sum(cant),0) FROM sumi
WHERE cprd=@xcprd AND sumi.calm=@xcalm
RETURN

-- Ejecutar el PA

DECLARE @xresul INT


EXECUTE PA_TotalStockxAlmacen 2, 2,@xresul OUTPUT
PRINT @xresul
--10. HAcer un PA denominado PA_HayStockxAlmacen que reciba como
parámetro el código del producto y el código del almacén, y que retorne 1
si hay Stock disponible del producto en esa ciudad, de lo contrario que
retorne 0. (usar PA_StockxAlmacen)

CREATE PROCEDURE PA_HayStockxAlmacen (@xcprd INT, @xcalm INT,@resul INT


OUTPUT)
AS
DECLARE @xStock INT
SET @resul=0
EXECUTE PA_TotalStockxAlmacen @xcprd, @xcalm, @xStock OUTPUT
IF @xStock>0 SET @resul=1
RETURN

-- Ejecutar el PA

DECLARE @xresul INT


EXECUTE PA_HayStockxAlmacen 7, 1,@xresul OUTPUT
PRINT @xresul

--11. Hacer un PA denominado PA_ValidarPreVenta, que reciba el Numero de


Venta y que retorne 1 si todos los productos de la Pre Venta cuenta con
Stock suficiente, de lo contrario retorna 0. (PA_StockxAlmacen). Se debe
insertar datos a la tabla pventas y dventas para probar.

select pventas.nvta,cprd,cant
from pventas,dventas,alma
where pventas.nvta=dventas.nvta and alma.calm=pventas.calm
and pventas.nvent=@xnvta=1
select * from dventas

insert into pventas values(1,'Pedro',1,GETDATE(),0)

insert into dventas values(1,1,5,2,10)


insert into dventas values(1,2,10,2,20)

drop proc PA_ValidarPreVenta

create procedure PA_ValidarPreVenta (@xnvta int ,@resul int output)


as
declare @nvta int,@cprd int
declare @cant decimal(12,2),@Total decimal(12,2)
declare @ciud char(2)

declare c_venta cursor for


select pventas.nvta,cprd,cant,ciud
from pventas,dventas,alma
where pventas.nvta=dventas.nvta and alma.calm=pventas.calm
and pventas.nvta=@xnvta
set @resul=1
open c_venta
fetch from c_venta into @nvta,@cprd,@cant,@ciud
while (@@FETCH_STATUS=0 and @resul=1)
begin
exec PA_TotalStockCiudad @cprd,@ciud,@Total output
if @cant>@Total
begin
set @resul=0
end
fetch from c_venta into @nvta,@cprd,@cant,@ciud

end
close c_venta
deallocate c_venta
return
declare @xres int
exec PA_ValidarPreVenta 1,@xres output
print @xres

--12. Hacer un PA denominado PA_TotalPreVenta, que reciba el Numero de


Venta y que retorne el Importe Total de la Pre Venta.
DROP PROCEDURE PA_TotalPreVenta
CREATE PROCEDURE PA_TotalPreVenta(@Nvta INT, @ImptTot DECIMAL OUTPUT)
AS
SET @ImptTot=0
SELECT @ImptTot=isnull(sum(impt),0) FROM pventas,dventas
WHERE pventas.nvta=dventas.nvta AND pventas.nvta=@Nvta

RETURN

INSERT INTO pventas VALUES(1,'CLIENTE A', 1, GETDATE(),100, 0)

INSERT INTO dventas VALUES(1,1,5,10,50)


INSERT INTO dventas VALUES(1,2,10,5,50)
select * from pventas
select * from dventas

-- Ejecutar el PA
DECLARE @xImptTot DECIMAL
EXECUTE PA_TotalPreVenta 2, @xImptTot OUTPUT
PRINT @xImptTot

--13. Hacer un PA denominado PA_DescPreVenta, que reciba como par᭥tro


Numero de Venta y retorne el importe de descuento de la Pre Ventas, el
descuento es dado bajo los siguientes criterios:
-- Si el importe total de la pre venta esta entre 10 y 20 bs se aplica
un descuento de 10%
-- Si el importe total de la pre venta esta entre 11 y 50 bs se aplica
un descuento de 15%
-- Si el importe total de la pre venta es mayor a 50 bs se aplica un
descuento de 20%

--14. Hacer un PA denominado PA_PromPreVenta, que reciba como par᭥tro


Numero de Venta y retorne el importe promedio de las cantidades los
producto de la Pre Ventas.
CREATE PROCEDURE PA_DelPreVentas(@Nvta INT)
AS
DELETE FROM dventas WHERE dventas.nvta=@Nvta
RETURN

-- Ejecutar el PA

EXECUTE PA_DelPreVentas 1

--15. Hacer un PA denominado PA_DelDetPreVentas, que reciba como par᭥tro


Numero de Ventas y elimina las tuplas de las tablas dventas.
create procedure PA_DelDetPreVentas ( @nrov int )
as
delete
from dventas
where nvta = @nrov
return

--select * from dventas --ver si elimino

execute PA_DelDetPreVentas 1

c--16. hacer un PA denominado PA_ProvSumistra, que reciba el co del


proveedor y retorne 1 si el proveedor ha suministrado algn Producto, de
lo contrario retorna 0.
create procedure PA_ProvSumistra (@cprov int ,@res int output)
as
select @res = isnull(COUNT(cprv),0)
from sumi
where cprv = @cprov
if (@res>0)
set @res = 1
return

declare @res int


execute PA_ProvSumistra 4 ,@res output
print @res
--17. Hacer un PA denominado PA_ListaProvSumistra, que muestre la lista
de los Proveedores que Suministraron algn Producto (usar
PA_ProvSumistra).

create procedure PA_ListaProvSumistra


as
declare @cprov int ,@nom char(40)
declare proveedor cursor for
select prov.cprv ,prov.nomb from prov
open proveedor
fetch next from proveedor into @cp

También podría gustarte