Subido por Daniel Harris

Lab cursor

Anuncio
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
FACULTAD DE INGENIERÍA DE SISTEMAS COMPUTACIONALES
BASE DE DATOS 2
LABORATORIO DE CURSORES
Utilizando cursor, imprima todas las ordenes
realizadas por año y el monto al que asciende
cada una.
Los datos aparecen en la base de datos Northwind
en las tablas Orders y Order Details.
Como muestran las imágenes, las ordenes deben
listarse clasificadas por año. Se listará el número
de la orden (orderID) y el monto de dicha orden
(usar campo cantidad y precio unitario para
calcular este monto).
Al final de cada año, colocar a cuánto asciende el
monto anual.
Se desea que después de listar todas las órdenes
del primer año, se listen las del segundo año y así
sucesivamente.
Muestre el scrip realizado y los resultados
obtenidos.
Ahora modifique su cursor para que liste las órdenes realizadas
anualmente, pero un empleado en particular.
El código del empleado es recibido como parámetro de entrada en un
procedimiento.
(El procedimiento que creará maneja los datos a través del
cursor, por lo que el cursor es parte del cuerpo del
procedimiento)
Una vez creado su procedimiento, pruebe el mismo enviando el código
de empleado 5.
RESULTADOS
declare @ID int,
@monto money,
@total money,
@cambioAnual int,
@año int
declare cursor_totalVentas cursor for
select o.OrderID, sum(Unitprice * quantity) as Monto ,
year(OrderDate) as Año
from orders o join [Order Details] d on o.orderID=d.OrderID
group by o.OrderID, OrderDate
open cursor_totalVentas
fetch cursor_totalVentas into @ID, @monto, @año
1
set @cambioAnual = @año
set @total = 0
print 'Año: ' + convert(varchar(4),@año)
while(@@FETCH_STATUS=0)
begin
if (@cambioAnual <> @año)
begin
print 'El importe en ' +convert(varchar(4), @cambioAnual) + '
es ' + convert(varchar(15), @total)
print 'Año: ' + convert(varchar(4), @año)
set @cambioAnual = @año
set @total = 0
end
else
begin
print convert(varchar(10), @id) +'
'+
convert(varchar(15), @monto)
set @total = @total + @monto
end
fetch cursor_totalVentas into @ID, @monto, @año
end
print 'El importe en ' + convert(varchar(4), @cambioAnual) + ' es ' +
convert(varchar(15), @total)
close cursor_totalVentas
deallocate cursor_totalVentas
create proc ventaAnual_empleado
@codEmpl int
as
begin
declare @ID int,
@monto money,
@total money,
@cambioAnual int,
@año int,
@idEmpl int
declare cursor_totalVentas cursor
for select o.EmployeeID, o.OrderID, sum(Unitprice * quantity),
year(OrderDate)
from orders o join [Order Details] d on o.orderID=d.OrderID
group by o.OrderID, year(OrderDate), o.EmployeeID
2
open cursor_totalVentas
fetch cursor_totalVentas into
@idEmpl, @ID, @monto, @año
set @cambioAnual = @año
set @total = 0
print 'Año: ' + convert(varchar(4),@año)
while(@@FETCH_STATUS=0)
begin
if(@cambioAnual = @año)
begin
if (@idEmpl = @codEmpl)
begin
print convert(varchar(10), @id) +'
'+ convert(varchar(15), @monto)
set @total += @monto
end
end
else
begin
print 'El importe en ' +convert(varchar(4),
@cambioAnual) + ' es ' + convert(varchar(15), @total)
print 'Año: ' + convert(varchar(4), @año)
set @cambioAnual = @año
set @total = 0
end
fetch cursor_totalVentas into @idEmpl, @ID, @monto, @año
end
print 'El importe en ' + convert(varchar(4), @cambioAnual) + ' es '
+ convert(varchar(15), @total)
close cursor_totalVentas
deallocate cursor_totalVentas
return
end
exec ventaAnual_empleado
5
Descargar