s14 Administracion
s14 Administracion
s14 Administracion
---------------------------
CREATE DATABASE RESTAURANT
USE RESTAURANT
/*
Se debe crear un procedimiento y cursor para poder cumplir con los objetivos
propuestos de la práctica para el registro de un pedido de un cliente.
(Debe aplicar BEGIN, COMMIT, ROLLBACK y el empleo del TRY y CATCH) Crear un
procedimiento almacenado donde haga uso transacciones, excepciones, parámetros de
entrada y
salida para crear un cursor que recorra todos los registros de la tabla CLIENTE
luego registre a cada uno, un PEDIDO con un valor N
máximo de registros aleatorios en PEDIDOMENUCOMIDA, estos registros se tomarán de
forma aleatoria de la tabla MENUCOMIDA , en la tabla PEDIDOMENUCOMIDA
el campo de cantidad, al igual que el valor N, serán ingresados como parámetros, el
precio lo tomará del campo precio de la tabla COMIDA.
Al final de insertar todos los registros de PEDIDOMENUCOMIDA se calcula y
actualiza el subtotal, iva y total del PEDIDO.
*/
EXEC SP_REGISTRO_PEDIDOS 5, 1
SELECT * FROM PEDIDO
-----
Ing. sobre el ejercicio del cursor del taller individual. Sandra Penzo
--------------------------------------------------------------------------
--------------------------------------------------------------------------
GO
create trigger tr_detalle_vta
on detalle after insert, delete
as
begin try
begin tran
declare @idprod int,@cant int
----
if exists(select * from deleted)--el ultimo borrado
begin
select @idprod=IDPRODUCTO, @cant = cant from deleted
---actualizar el stock
update PRODUCTO set STOCK = STOCK + @cant
where IDPRODUCTO = @idprod
end
else if exists(select * from inserted)--el ultimo insertado
begin
select @idprod=IDPRODUCTO, @cant = cant from inserted
update PRODUCTO set STOCK = STOCK - @cant
where IDPRODUCTO = @idprod
end
commit tran
end try
begin catch
rollback tran
end catch
---
go
create procedure registrar_vta
@id int, --id cliente
@mp int, --metodo de pago (1)= contado, (2)=credito
@n int, --numero de productos
@m varchar(100) output--para los mensajes
as
begin try
begin tran
--graba la cabecera de vta
declare @idvta int = (select isnull(MAX(idventa)+1,0) from VENTA)
insert VENTA (IDVENTA,FECHA_REG,METODO_PAGO,IDCLIENTE)
values(@idvta,getdate(),@mp,@id)
--graba el detalle de venta
declare @idprod int,@pvp real,@cant int,@st real
declare cursor_producto cursor for
select top (@n) idproducto,pvp from producto order by newid()
open cursor_producto
fetch cursor_producto into @idprod,@pvp
while @@fetch_status=0
begin
set @cant = (3-1)*rand()+1
set @st = @cant*@pvp
insert into detalle (IDVENTA,IDPRODUCTO,CANT,SUBTOTAL) values
(@idvta,@idprod,@cant,@st)
fetch cursor_producto into @idprod,@pvp
end
close cursor_producto
deallocate cursor_producto
set @m = 'OK'
commit tran
end try
begin catch
deallocate cursor_producto
rollback tran
set @m = error_message()
end catch
----procedimiento para borrar ventas
go
create procedure eliminar_vtas
@id int,--id venta
@m varchar(100) output
as
begin try
begin tran
declare @idprod int --id del producto
declare cursor_detalle cursor for select IDPRODUCTO from DETALLE where IDVENTA =
@id
open cursor_detalle
fetch cursor_detalle into @idprod
while @@fetch_status=0
begin
delete from DETALLE where IDVENTA = @id and IDPRODUCTO = @idprod
fetch cursor_detalle into @idprod
end
close cursor_detalle
deallocate cursor_detalle
delete from VENTA where IDVENTA = @id
set @m = 'OK'
commit tran
end try
begin catch
rollback tran
deallocate cursor_detalle
set @m=error_message()
end catch
go
---grabar una venta
select * from cliente
declare @msg varchar(100)
exec registrar_vta 6,1,3,@m=@msg output
print @msg
--
select * from producto
select * from VENTA v join DETALLE d
on v.IDVENTA = d.IDVENTA order by FECHA_REG desc
go
declare @msg varchar(100)
exec eliminar_vtas 11, @m=@msg output
print @msg