ejemplo de uso de cursores para reportes complejos

Post on 14-Apr-2015

18 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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'

top related