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