SlideShare una empresa de Scribd logo
1 de 12
1
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
TEMA 01 Teoría de los
Tema Nº13:
Introducción a la programación en SQL SERVER IV.
Indicador de logro Nº13:
Implementa cursores para la gestión de datos.
FUNDAMENTOS
DE BASE DE
DATOS.
2
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
TEMA Nº13:
Introducción a la programación en SQL SERVER IV.
Subtema 13.1:
Declaración de cursores, apertura de un cursor, lectura y
recorrido de un cursor, cierre de un cursor y eliminación de
un cursor.
Es como que, si Fuese una tabla, pero se almacena en la memoria de la computadora. Son
usados para almacenar estructuras de datos en la secuencia de un proceso de negocio.
Se recomienda usarlos en las situaciones que amerite el caso.
Son estructuras que se crean en la memoria del ordenador, capaces de albergar gran
cantidad de datos, esto dependerá del tamaño de la memoria RAM o memoria disponible.
Los cursores son muy eficientes para utilizarlos en Job de la base de datos que realicen
alguna operación donde necesitemos modificar alguna información dentro de un bucle. Los
cursores demandan mucho del servidor de base datos, por lo tanto, no es recomendable
abusar del mismo, ya que necesitan bastantes recursos para su ejecución
Un cursor es una herramienta de SQL Server que nos permite recorrer el resultado de una
consulta SQL y realizar operaciones con estos resultados dentro de un bucle de datos.
 Un cursor es una variable que nos permite recorrer con un conjunto de resultados
obtenidos a través de una sentencia SELECTfila por fila.
 El uso de los cursores es una técnica que permite tratar fila por fila el resultado de
una consulta, contrariamente al SELECT SQL que trata a un conjunto de fila.
 Los cursores pueden ser implementador por instrucciones TRANSACT-SQL
(cursores ANSI-SQL) o por la API OLE-DB.
¿Cómo se crea un CURSOR?
 Cuando trabajemos con cursores debemos seguir los siguientes pasos.
o Declarar el cursor, utilizando DECLARE
o Abrir el cursor, utilizando OPEN
o Leer los datos del cursor, utilice FETCH …INTO
o Cerrar el cursor, utilizando CLOSE
o Liberar el cursor, utilizando DEALLOCATE
3
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
ESTRUCTURA DE UN CURSOR:
-- Declaración del cursor
DECLARE <nombre_cursor> CURSOR FOR <sentencia_sql>
-- Apertura del cursor
OPEN <nombre_cursor>
-- Lectura de la primera fila del cursor
FETCH <nombre_cursor> INTO <lista_variables>
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- Procesos …
-- Lectura de la siguiente fila de un cursor
FETCH <nombre_cursor> INTO <lista_variables> ...
END -- Fin del bucle WHILE
-- Cierra el cursor
CLOSE <nombre_cursor>
-- Libera los recursos del cursor
DEALLOCATE <nombre_cursor>
4
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
Subtema 13.2:
Sentencias a emplear: DECLARE CURSOR, OPEN, FETCH-
WHILE, CLOSE, DEALLOCATE.
DECLARACIÓN DE CURSOR
DECLARE [Nombre Cursor] CURSOR FOR <SQL Select, . . . . .>
El primer paso constará de la declaración del cursor, donde se indicarán (junto con
el nombre del cursor) la consulta que el mismo representará y algunas otras
características bastante interesantes.
Un ejemplo de declaración de cursor es el siguiente:
Donde ProdInfo representará al nombre del cursor y la sentencia “SELECT
ProductNumber, Name FROM Producto” será el conjunto de datos del mismo,
como comentamos previamente, es posible en este paso definir algunas
características del comportamiento del cursor, por ejemplo, la sentencia:
DECLARE ProdInfo CURSOR FOR SELECT Name
FROM Producto
Indicará que el cursor será de solo lectura, más adelante veremos en detalle las
opciones disponibles, por el momento nuestro objetivo es crear un cursor lo más
simple posible.
DECLARE ProdInfo CURSOR READ_ONLY FOR
SELECT Name FROM Producto
APERTURA DEL CURSOR
OPEN [nombre de cursor]
La apertura del cursor ejecutará la consulta definida en el paso previo y cargará los
datos en el mismo. La función OPEN de T-SQL permitirá efectuar esta terea, para
continuar con el ejemplo previo la forma de abrir el cursor será la siguiente:
Open ProdInfo
5
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
CIERRE DEL CURSOR
CLOSE [nombre de cursor]
En el cierre del cursor se liberarán los registros tomados por el mismo. Una vez que
el cursor es cerrado ya no podrá recorrerse el conjunto de resultados hasta que el
mismo sea reabierto, la sentencia CLOSE cerrará un cursor abierto y la sintaxis
puede verse a continuación:
Close ProdInfo
RECORRIDO DEL CURSOR Y ACCESO A LOS DATOS
Este paso constará de recorrer los resultados del cursor, la instrucción FETCH
permitirá efectuar dicha operación. Las filas leídas podrán copiarse a variables
utilizando la sentencia INTO en combinación con la sentencia FETCH, por ejemplo,
la sentencia:
FETCH NEXT FROM [nombre de cursor]
FETCH NEXT FROM ProdInfo INTO @Description
Tomará la siguiente fila de resultados del cursor y lo alojará en la variable
@Description.
Un detalle a comentar es que en la sentencia INTO (como puede verse en el
ejemplo anterior) el mapeo entre columnas del cursor y variables se realizará
implícitamente, asignándose la primera columna a la primera variable, la segunda
columna a la segunda variable y así sucesivamente. Esto implica que deberán
crearse tantas variables como columnas se definan en la declaración del cursor y
las mismas deberán ubicarse en el mismo orden que se encuentran definidas las
columnas en la sentencia SELECT de la declaración.
Como cada sentencia FETCH leerá un registro, una pregunta interesante que
podríamos hacernos es, ¿de qué manera podremos saber si existe un próximo o
previo registro, o si hemos llegado al límite (ya sea superior o inferior)?. La
respuesta se encontrará en una variable de SQL Server llamada
@@FETCH_STATUS que tomará el valor 0 si la lectura del registro ha sido
correcta.
6
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
En este punto será también posible modificar o eliminar las filas que se van
recorriendo, como veremos al final del artículo.
LEER EL CURSOR
Gracias a este bucle, se podrán leer todas las filas del cursor.
WHILE (@@FETCH_STATUS=0)
BEGIN
. . . . . .
FETCH NEXT FROM [Nombre del Cursor]
END
DESHACER o DESALOJAR EL CURSOR
DEALLOCATE Nombre de Cursor
DEALLOCATE ProdInfo
Este paso eliminará la referencia al cursor definido previamente, por lo que ya no
será posible realizar una reapertura del mismo.
Uso de Cursores, se tiene la siguiente tabla:
7
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
Cuyos datos son los siguientes:
Puede descargar el Script de base de datos SEMANA13_01.sql.
EJEMPLO 01:
Crear un cursor el cual muestre el título del libro y su respectivo precio, y en una
columna separada el precio aumentado en 10 soles más, de aquellos libros que
pertenezcan al área ‘LPROG’ para ellos debe contar con la siguiente tabla de la base de
datos LIBRERÍA.
SOLUCIÓN: este código debe ser ejecutado en una sola selección.
RESULTADO DE LA EJECUIÓN DEL CURSOR:
8
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
EJEMPLO 02:
Mediante un cursor obtener una copia de seguridad de
todos los datos de la tabla libro, para ellos debe contar
con una nueva tabla con la misma estructura de la tabla
libro, con el nombre LIBRO_BACKUP (agregar esta
nueva tabla a la base de datos).
SOLUCIÓN:
Ejecute este código en una sola selección.
Verificar en la tabla LIBRO_BACKUP
Los datos de la tabla LIBRO han pasado a la tabla LIBRO_BACKUP.
9
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
EJEMPLO 03:
He aquí un ejemplo del cursor de Simple script de copia de seguridad las bases de datos
de SQL Server en que se expidan copias de seguridad de manera serial:
SOLUCIÓN:
Para que el código funcione, debe crear una carpeta en el disco C: con el nombre Backup,
es decir: C:Backup.
AL EJECUTAR EL CODIGO, COMO RESULTADO DEBERÁ OBTENER LOS
SIGUIENTE:
Y EN EL DISCO C:
Se observa la copia de seguridad de la base datos que estamos usando.
10
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
EJEMPLO 4:
Se pide crear un cursor que sea capaz de mostrar los pedidos realizados, según la tabla
CABECERA_PEDIDO este tiene 3 pedidos los cuales son: ‘00001’, ‘00002’ y ‘00003’, para
ello se debe ingresar el número del pedido (ALMACENAR EN UNA VARIABLE), por
intermedio de variables, y brindar la información solicitada, tal como se muestran en las
siguientes imágenes
Para realizar este ejercicio, se debe contar con el siguiente modelo relacional:
EL script de base de datos se encuentra en el archivo SEMANA12_02.sql
SOLUCIÓN:
11
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
Al ejecutar el código, como resultado obtendrá lo siguiente:
12
Guía 13 Escuela de
Tecnología
Fundamentos de Base de Datos
CONCLUSIONES Y RECOMENDACIONES DE LA EXPERIENCIA
 Un cursor es una estructura utilizada para el recorrido de los registros que es el
resultado de una consulta.
 Un cursor se utiliza para el procesamiento individual de las filas devueltas por el
sistema gestor de base de datos para una consulta.
 Un cursor se declara, se abre, lee, recorre, se cierra y se libera de memoria.
 @@FetchStatus es una variable global que devuelve un valor que representa el
estado del cursor. El valor correcto es 0.
ACTIVIDAD VIRTUAL
Analizar y revisar detenidamente este recurso de aprendizaje y luego responde las
preguntas propuestas.
 ¿Qué es un Cursor?
 Importancia de los cursores en las bases de datos.
 Se tiene el siguiente modelo relacional:
 Descargar y ejecutar el script de base de datos llamado Semana12_03.sql y
proceda a realizar los siguientes cursores:
o Obtener el Libro, con el precio más caro.
o Obtener los sueldos acumulados según el género del trabajador.
o Obtener el total acumulado en precios según el área del libro.
o Listado general de Libros.
o Listado general de trabajadores.
o Mediante el género, lista a los trabajadores y la sumatoria de los sueldos
como resultado de resumen.
o Mediante el área del libro, se pide mostrar los libros y la sumatoria de los
precios, como resultado de resumen.

Más contenido relacionado

Similar a 13 Guía_Fundamentos de Base de Datos (1).docx

6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageWilliam Lozano
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageYoly QC
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageChars Orden
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageAny Saula
 
6. SQL structured query language
6. SQL   structured query language6. SQL   structured query language
6. SQL structured query languageMarcelo Herrera
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languagejhonny tenesaca
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2Oscar Valdivieso
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageLiliana Charco
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageCesar Yupa
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddlusamn
 
Mi lenguaje preferido- SQL
Mi lenguaje preferido- SQLMi lenguaje preferido- SQL
Mi lenguaje preferido- SQLFranshezka
 

Similar a 13 Guía_Fundamentos de Base de Datos (1).docx (20)

6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. SQL structured query language
6. SQL   structured query language6. SQL   structured query language
6. SQL structured query language
 
111
111111
111
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
Pl
PlPl
Pl
 
Statement
StatementStatement
Statement
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Mi lenguaje preferido- SQL
Mi lenguaje preferido- SQLMi lenguaje preferido- SQL
Mi lenguaje preferido- SQL
 
Manual practicosql
Manual practicosqlManual practicosql
Manual practicosql
 
Manual practicosql
Manual practicosqlManual practicosql
Manual practicosql
 
Manual practicosql
Manual practicosqlManual practicosql
Manual practicosql
 
Java con base de datos
Java con base  de datosJava con base  de datos
Java con base de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 

Más de LeydyVeronicaDelgado

12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...
12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...
12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...LeydyVeronicaDelgado
 
10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docxLeydyVeronicaDelgado
 
8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docxLeydyVeronicaDelgado
 
3573-Manuscrito-15781-1-10-20181128.pdf
3573-Manuscrito-15781-1-10-20181128.pdf3573-Manuscrito-15781-1-10-20181128.pdf
3573-Manuscrito-15781-1-10-20181128.pdfLeydyVeronicaDelgado
 
Guia de laboratorio - Configuracion de la red.docx
Guia de laboratorio - Configuracion de la red.docxGuia de laboratorio - Configuracion de la red.docx
Guia de laboratorio - Configuracion de la red.docxLeydyVeronicaDelgado
 
3573-Manuscrito-15781-1-10-20181128 (1).pdf
3573-Manuscrito-15781-1-10-20181128 (1).pdf3573-Manuscrito-15781-1-10-20181128 (1).pdf
3573-Manuscrito-15781-1-10-20181128 (1).pdfLeydyVeronicaDelgado
 
Tema 10 - Manejo de Archivos de texto.pptx
Tema 10 - Manejo de Archivos de texto.pptxTema 10 - Manejo de Archivos de texto.pptx
Tema 10 - Manejo de Archivos de texto.pptxLeydyVeronicaDelgado
 
Controlar la adiccion al Smartphone.pptx
Controlar la adiccion al Smartphone.pptxControlar la adiccion al Smartphone.pptx
Controlar la adiccion al Smartphone.pptxLeydyVeronicaDelgado
 
FPIPS-106 Modelo de Requerimientos.docx
FPIPS-106 Modelo de Requerimientos.docxFPIPS-106 Modelo de Requerimientos.docx
FPIPS-106 Modelo de Requerimientos.docxLeydyVeronicaDelgado
 
FF0319-01-business-organic-powerpoint-template.pptx
FF0319-01-business-organic-powerpoint-template.pptxFF0319-01-business-organic-powerpoint-template.pptx
FF0319-01-business-organic-powerpoint-template.pptxLeydyVeronicaDelgado
 
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.ppt
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.pptactividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.ppt
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.pptLeydyVeronicaDelgado
 
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdf
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdfFPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdf
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdfLeydyVeronicaDelgado
 
Controlar la adiccion al Smartphone (1).pptx
Controlar la adiccion al Smartphone (1).pptxControlar la adiccion al Smartphone (1).pptx
Controlar la adiccion al Smartphone (1).pptxLeydyVeronicaDelgado
 

Más de LeydyVeronicaDelgado (20)

12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...
12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...
12_Matemática aplicada_Planteamiento y resolución de problemas con ecuaciones...
 
Crear un nuevo usuario.docx
Crear un nuevo usuario.docxCrear un nuevo usuario.docx
Crear un nuevo usuario.docx
 
10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx
 
EC3 - PLANTILLA.pptx
EC3 - PLANTILLA.pptxEC3 - PLANTILLA.pptx
EC3 - PLANTILLA.pptx
 
8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx
 
Plantilla-IDAT.pptx
Plantilla-IDAT.pptxPlantilla-IDAT.pptx
Plantilla-IDAT.pptx
 
3573-Manuscrito-15781-1-10-20181128.pdf
3573-Manuscrito-15781-1-10-20181128.pdf3573-Manuscrito-15781-1-10-20181128.pdf
3573-Manuscrito-15781-1-10-20181128.pdf
 
Guia de laboratorio - Configuracion de la red.docx
Guia de laboratorio - Configuracion de la red.docxGuia de laboratorio - Configuracion de la red.docx
Guia de laboratorio - Configuracion de la red.docx
 
3573-Manuscrito-15781-1-10-20181128 (1).pdf
3573-Manuscrito-15781-1-10-20181128 (1).pdf3573-Manuscrito-15781-1-10-20181128 (1).pdf
3573-Manuscrito-15781-1-10-20181128 (1).pdf
 
10_SESION_10.pdf
10_SESION_10.pdf10_SESION_10.pdf
10_SESION_10.pdf
 
Tema 10 - Manejo de Archivos de texto.pptx
Tema 10 - Manejo de Archivos de texto.pptxTema 10 - Manejo de Archivos de texto.pptx
Tema 10 - Manejo de Archivos de texto.pptx
 
Tarea 9.docx
Tarea 9.docxTarea 9.docx
Tarea 9.docx
 
Controlar la adiccion al Smartphone.pptx
Controlar la adiccion al Smartphone.pptxControlar la adiccion al Smartphone.pptx
Controlar la adiccion al Smartphone.pptx
 
FPIPS-106 Modelo de Requerimientos.docx
FPIPS-106 Modelo de Requerimientos.docxFPIPS-106 Modelo de Requerimientos.docx
FPIPS-106 Modelo de Requerimientos.docx
 
FF0319-01-business-organic-powerpoint-template.pptx
FF0319-01-business-organic-powerpoint-template.pptxFF0319-01-business-organic-powerpoint-template.pptx
FF0319-01-business-organic-powerpoint-template.pptx
 
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.ppt
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.pptactividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.ppt
actividad2-diagrama-de-casos-de-uso-del-negocio-y-del-sistema.ppt
 
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdf
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdfFPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdf
FPIPS_104_Modelo_de_Casos_de_Uso_de_Negocio_MCUN_tarea_00.docx.pdf
 
Prueba de conocimiento (1).pdf
Prueba de conocimiento (1).pdfPrueba de conocimiento (1).pdf
Prueba de conocimiento (1).pdf
 
Controlar la adiccion al Smartphone (1).pptx
Controlar la adiccion al Smartphone (1).pptxControlar la adiccion al Smartphone (1).pptx
Controlar la adiccion al Smartphone (1).pptx
 
Scrum- Historias y criterios.pptx
Scrum- Historias y criterios.pptxScrum- Historias y criterios.pptx
Scrum- Historias y criterios.pptx
 

13 Guía_Fundamentos de Base de Datos (1).docx

  • 1. 1 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos TEMA 01 Teoría de los Tema Nº13: Introducción a la programación en SQL SERVER IV. Indicador de logro Nº13: Implementa cursores para la gestión de datos. FUNDAMENTOS DE BASE DE DATOS.
  • 2. 2 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos TEMA Nº13: Introducción a la programación en SQL SERVER IV. Subtema 13.1: Declaración de cursores, apertura de un cursor, lectura y recorrido de un cursor, cierre de un cursor y eliminación de un cursor. Es como que, si Fuese una tabla, pero se almacena en la memoria de la computadora. Son usados para almacenar estructuras de datos en la secuencia de un proceso de negocio. Se recomienda usarlos en las situaciones que amerite el caso. Son estructuras que se crean en la memoria del ordenador, capaces de albergar gran cantidad de datos, esto dependerá del tamaño de la memoria RAM o memoria disponible. Los cursores son muy eficientes para utilizarlos en Job de la base de datos que realicen alguna operación donde necesitemos modificar alguna información dentro de un bucle. Los cursores demandan mucho del servidor de base datos, por lo tanto, no es recomendable abusar del mismo, ya que necesitan bastantes recursos para su ejecución Un cursor es una herramienta de SQL Server que nos permite recorrer el resultado de una consulta SQL y realizar operaciones con estos resultados dentro de un bucle de datos.  Un cursor es una variable que nos permite recorrer con un conjunto de resultados obtenidos a través de una sentencia SELECTfila por fila.  El uso de los cursores es una técnica que permite tratar fila por fila el resultado de una consulta, contrariamente al SELECT SQL que trata a un conjunto de fila.  Los cursores pueden ser implementador por instrucciones TRANSACT-SQL (cursores ANSI-SQL) o por la API OLE-DB. ¿Cómo se crea un CURSOR?  Cuando trabajemos con cursores debemos seguir los siguientes pasos. o Declarar el cursor, utilizando DECLARE o Abrir el cursor, utilizando OPEN o Leer los datos del cursor, utilice FETCH …INTO o Cerrar el cursor, utilizando CLOSE o Liberar el cursor, utilizando DEALLOCATE
  • 3. 3 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos ESTRUCTURA DE UN CURSOR: -- Declaración del cursor DECLARE <nombre_cursor> CURSOR FOR <sentencia_sql> -- Apertura del cursor OPEN <nombre_cursor> -- Lectura de la primera fila del cursor FETCH <nombre_cursor> INTO <lista_variables> WHILE (@@FETCH_STATUS = 0) BEGIN -- Procesos … -- Lectura de la siguiente fila de un cursor FETCH <nombre_cursor> INTO <lista_variables> ... END -- Fin del bucle WHILE -- Cierra el cursor CLOSE <nombre_cursor> -- Libera los recursos del cursor DEALLOCATE <nombre_cursor>
  • 4. 4 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos Subtema 13.2: Sentencias a emplear: DECLARE CURSOR, OPEN, FETCH- WHILE, CLOSE, DEALLOCATE. DECLARACIÓN DE CURSOR DECLARE [Nombre Cursor] CURSOR FOR <SQL Select, . . . . .> El primer paso constará de la declaración del cursor, donde se indicarán (junto con el nombre del cursor) la consulta que el mismo representará y algunas otras características bastante interesantes. Un ejemplo de declaración de cursor es el siguiente: Donde ProdInfo representará al nombre del cursor y la sentencia “SELECT ProductNumber, Name FROM Producto” será el conjunto de datos del mismo, como comentamos previamente, es posible en este paso definir algunas características del comportamiento del cursor, por ejemplo, la sentencia: DECLARE ProdInfo CURSOR FOR SELECT Name FROM Producto Indicará que el cursor será de solo lectura, más adelante veremos en detalle las opciones disponibles, por el momento nuestro objetivo es crear un cursor lo más simple posible. DECLARE ProdInfo CURSOR READ_ONLY FOR SELECT Name FROM Producto APERTURA DEL CURSOR OPEN [nombre de cursor] La apertura del cursor ejecutará la consulta definida en el paso previo y cargará los datos en el mismo. La función OPEN de T-SQL permitirá efectuar esta terea, para continuar con el ejemplo previo la forma de abrir el cursor será la siguiente: Open ProdInfo
  • 5. 5 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos CIERRE DEL CURSOR CLOSE [nombre de cursor] En el cierre del cursor se liberarán los registros tomados por el mismo. Una vez que el cursor es cerrado ya no podrá recorrerse el conjunto de resultados hasta que el mismo sea reabierto, la sentencia CLOSE cerrará un cursor abierto y la sintaxis puede verse a continuación: Close ProdInfo RECORRIDO DEL CURSOR Y ACCESO A LOS DATOS Este paso constará de recorrer los resultados del cursor, la instrucción FETCH permitirá efectuar dicha operación. Las filas leídas podrán copiarse a variables utilizando la sentencia INTO en combinación con la sentencia FETCH, por ejemplo, la sentencia: FETCH NEXT FROM [nombre de cursor] FETCH NEXT FROM ProdInfo INTO @Description Tomará la siguiente fila de resultados del cursor y lo alojará en la variable @Description. Un detalle a comentar es que en la sentencia INTO (como puede verse en el ejemplo anterior) el mapeo entre columnas del cursor y variables se realizará implícitamente, asignándose la primera columna a la primera variable, la segunda columna a la segunda variable y así sucesivamente. Esto implica que deberán crearse tantas variables como columnas se definan en la declaración del cursor y las mismas deberán ubicarse en el mismo orden que se encuentran definidas las columnas en la sentencia SELECT de la declaración. Como cada sentencia FETCH leerá un registro, una pregunta interesante que podríamos hacernos es, ¿de qué manera podremos saber si existe un próximo o previo registro, o si hemos llegado al límite (ya sea superior o inferior)?. La respuesta se encontrará en una variable de SQL Server llamada @@FETCH_STATUS que tomará el valor 0 si la lectura del registro ha sido correcta.
  • 6. 6 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos En este punto será también posible modificar o eliminar las filas que se van recorriendo, como veremos al final del artículo. LEER EL CURSOR Gracias a este bucle, se podrán leer todas las filas del cursor. WHILE (@@FETCH_STATUS=0) BEGIN . . . . . . FETCH NEXT FROM [Nombre del Cursor] END DESHACER o DESALOJAR EL CURSOR DEALLOCATE Nombre de Cursor DEALLOCATE ProdInfo Este paso eliminará la referencia al cursor definido previamente, por lo que ya no será posible realizar una reapertura del mismo. Uso de Cursores, se tiene la siguiente tabla:
  • 7. 7 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos Cuyos datos son los siguientes: Puede descargar el Script de base de datos SEMANA13_01.sql. EJEMPLO 01: Crear un cursor el cual muestre el título del libro y su respectivo precio, y en una columna separada el precio aumentado en 10 soles más, de aquellos libros que pertenezcan al área ‘LPROG’ para ellos debe contar con la siguiente tabla de la base de datos LIBRERÍA. SOLUCIÓN: este código debe ser ejecutado en una sola selección. RESULTADO DE LA EJECUIÓN DEL CURSOR:
  • 8. 8 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos EJEMPLO 02: Mediante un cursor obtener una copia de seguridad de todos los datos de la tabla libro, para ellos debe contar con una nueva tabla con la misma estructura de la tabla libro, con el nombre LIBRO_BACKUP (agregar esta nueva tabla a la base de datos). SOLUCIÓN: Ejecute este código en una sola selección. Verificar en la tabla LIBRO_BACKUP Los datos de la tabla LIBRO han pasado a la tabla LIBRO_BACKUP.
  • 9. 9 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos EJEMPLO 03: He aquí un ejemplo del cursor de Simple script de copia de seguridad las bases de datos de SQL Server en que se expidan copias de seguridad de manera serial: SOLUCIÓN: Para que el código funcione, debe crear una carpeta en el disco C: con el nombre Backup, es decir: C:Backup. AL EJECUTAR EL CODIGO, COMO RESULTADO DEBERÁ OBTENER LOS SIGUIENTE: Y EN EL DISCO C: Se observa la copia de seguridad de la base datos que estamos usando.
  • 10. 10 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos EJEMPLO 4: Se pide crear un cursor que sea capaz de mostrar los pedidos realizados, según la tabla CABECERA_PEDIDO este tiene 3 pedidos los cuales son: ‘00001’, ‘00002’ y ‘00003’, para ello se debe ingresar el número del pedido (ALMACENAR EN UNA VARIABLE), por intermedio de variables, y brindar la información solicitada, tal como se muestran en las siguientes imágenes Para realizar este ejercicio, se debe contar con el siguiente modelo relacional: EL script de base de datos se encuentra en el archivo SEMANA12_02.sql SOLUCIÓN:
  • 11. 11 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos Al ejecutar el código, como resultado obtendrá lo siguiente:
  • 12. 12 Guía 13 Escuela de Tecnología Fundamentos de Base de Datos CONCLUSIONES Y RECOMENDACIONES DE LA EXPERIENCIA  Un cursor es una estructura utilizada para el recorrido de los registros que es el resultado de una consulta.  Un cursor se utiliza para el procesamiento individual de las filas devueltas por el sistema gestor de base de datos para una consulta.  Un cursor se declara, se abre, lee, recorre, se cierra y se libera de memoria.  @@FetchStatus es una variable global que devuelve un valor que representa el estado del cursor. El valor correcto es 0. ACTIVIDAD VIRTUAL Analizar y revisar detenidamente este recurso de aprendizaje y luego responde las preguntas propuestas.  ¿Qué es un Cursor?  Importancia de los cursores en las bases de datos.  Se tiene el siguiente modelo relacional:  Descargar y ejecutar el script de base de datos llamado Semana12_03.sql y proceda a realizar los siguientes cursores: o Obtener el Libro, con el precio más caro. o Obtener los sueldos acumulados según el género del trabajador. o Obtener el total acumulado en precios según el área del libro. o Listado general de Libros. o Listado general de trabajadores. o Mediante el género, lista a los trabajadores y la sumatoria de los sueldos como resultado de resumen. o Mediante el área del libro, se pide mostrar los libros y la sumatoria de los precios, como resultado de resumen.