Ejemplo de Uso de Cursores Para Reportes Complejos

2
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 COMPLEJOS CREATE PROCEDURE ReportePorEstado @estado varchar(5) --EL ESTADO SE MANEJA COMO UN PARAMETRO as 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 RESPECTIVO DECLARE authors_cursor CURSOR FOR SELECT au_id, au_fname, au_lname FROM authors WHERE state = @estado ORDER BY au_id OPEN authors_cursor FETCH NEXT FROM authors_cursor --CAPTURA EL PRIMER AUTOR INTO @au_id, @au_fname, @au_lname WHILE @@FETCH_STATUS = 0 --REALIZA EL RECORRIDO PARA CADA ------AUTOR DEL ESTADO ESCOGIDO BEGIN PRINT ' ' SELECT @message = '----- Libros del autor: ' + @au_fname + ' ' + @au_lname PRINT @message -- Declara un cursor anidado basado -- en au_id del cursor externo.

Transcript of Ejemplo de Uso de Cursores Para Reportes Complejos

Page 1: Ejemplo de Uso de Cursores Para Reportes Complejos

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

Page 2: Ejemplo de Uso de Cursores Para Reportes Complejos

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'