ejemplo de uso de cursores para reportes complejos
TRANSCRIPT
USO DE CURSORES PARA ELABORAR REPORTES COMPLEJOS
--Este procedimiento reporta los libros de cada autor clasificados por estado--basado en la base de datos pubs--MUESTRA COMO LOS CURSORES PUEDEN SER ANIDADOS PARA ELABORAR REPORTES COMPLEJOSCREATE PROCEDURE ReportePorEstado@estado varchar(5) --EL ESTADO SE MANEJA COMO UN PARAMETROas
DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),@message varchar(80), @title varchar(80)
PRINT '---REPORTE DE AUTORES DEL ESTADO '+ @estado---'
--DECLARA UN CURSOR SOBRE LOS AUTORES DEL ESTADO RESPECTIVODECLARE authors_cursor CURSOR FOR SELECT au_id, au_fname, au_lnameFROM authorsWHERE state = @estadoORDER BY au_id
OPEN authors_cursor
FETCH NEXT FROM authors_cursor --CAPTURA EL PRIMER AUTORINTO @au_id, @au_fname, @au_lname
WHILE @@FETCH_STATUS = 0 --REALIZA EL RECORRIDO PARA CADA ------AUTOR DEL ESTADO ESCOGIDOBEGIN
PRINT ' 'SELECT @message = '----- Libros del autor: ' +
@au_fname + ' ' + @au_lname
PRINT @message
-- Declara un cursor anidado basado -- en au_id del cursor externo.
DECLARE titles_cursor CURSOR FOR SELECT t.titleFROM titleauthor ta, titles tWHERE ta.title_id = t.title_id ANDta.au_id = @au_id -- El valor de la variable @au_id esta determinado
--por el cursor externo
OPEN titles_cursorFETCH NEXT FROM titles_cursor INTO @title
IF @@FETCH_STATUS <> 0 --SI NO HAY LIBROS PARA ESTE -----------AUTOR
PRINT ' <<No Books>>'
WHILE @@FETCH_STATUS = 0 --BUSCA TODOS LOS LIBROS PARA ---ESTE AUTOR
BEGIN
SELECT @message = ' ' + @titlePRINT @messageFETCH NEXT FROM titles_cursor INTO @title
END
CLOSE titles_cursorDEALLOCATE titles_cursor
-- Continúa con el siguiente autorFETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname
END
CLOSE authors_cursorDEALLOCATE authors_cursorGO
ReportePorEstado 'ut'