You are on page 1of 4

Jair Villao Gmez

CURSORES EN BASE DE DATOS


Definicin:
En bases de datos, el trmino cursor se refiere a una estructura de control
utilizada para el recorrido de los registros del 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. Es necesario
debido a que muchos lenguajes de programacin sufren de lo que en ingls
se conoce como impedance mismatch (falta de concordancia).
Un cursor puede verse como un iterador sobre la coleccin de filas que
habr en el set de resultados.
Los cursores amplan el procesamiento de los resultados porque:

Permiten situarse en filas especficas del conjunto de resultados.

Recuperan una fila o un bloque de filas de la posicin actual en el


conjunto de resultados.

Aceptan modificaciones de los datos de las filas en la posicin actual


del conjunto de resultados.

Aceptan diferentes grados de visibilidad para los cambios que


realizan otros usuarios en la informacin de la base de datos
que se presenta en el conjunto de resultados.

Implementaciones de cursores
SQL Server admite tres implementaciones de cursores.

1. Cursores de Transact-SQL
Se basan en la sintaxis de DECLARE CURSOR y se usan principal en scripts
de Transact-SQL, procedimientos almacenados y desencadenadores. Los
cursores de Transact-SQL se implementan en el servidor y se administran
mediante
instrucciones
Transact-SQL
enviadas
del
cliente
al
servidor. Tambin se pueden encontrar en lotes, procedimientos
almacenados o desencadenadores.

2. Cursores de servidor de la API (Interfaz de programacin de aplicaciones)


Permiten las funciones de cursor de la API con OLE DB y ODBC. Los cursores
de servidor de la API estn implementados en el servidor. Cada vez que una
aplicacin cliente llama a una funcin de cursor de la API, el proveedor OLE
DB de SQL Server Native Client o el controlador de ODBC transmite la

Jair Villao Gmez


solicitud al servidor para que realice una accin con el cursor de servidor de
la API.

3. Cursores del cliente


Los implementan internamente el controlador ODBC de SQL Server Native
Client y la DLL que implementa la API ADO. Los cursores del cliente se
implementan almacenando en cach todas las filas de conjuntos de
resultados del cliente. Cada vez que una aplicacin cliente llama a una
funcin de cursor de la API, el controlador ODBC de SQL Server Native Client
o la DLL de ADO realizan la operacin de cursor en las filas del conjunto de
resultados almacenadas en la memoria cach del cliente.

Creacin y uso (Cursores de Transact-SQL)


Un cursor es creado utilizando la sentencia DECLARE CURSOR. Es
obligatorio asignarle un nombre
DECLARE cursor_name CURSOR FOR SELECT... FROM...

Antes de ser utilizado, el cursor debe ser abierto con una sentencia OPEN.
Como resultado de esta sentencia, el cursor se posiciona antes de la
primera fila del set de resultados.
OPEN cursor_name

Un cursor se posiciona en una fila especfica del set de resultados con la


sentencia FETCH. Una sentencia fetch transfiere la informacin de la fila a
la aplicacin. Una vez todas las filas han sido procesadas o la sentencia
fetch queda posicionada en una fila no existente, el SGBD devuelve un
SQLSTATE '02000' (acompaado normalmente de un SQLCODE +100) para
indicar el final del set de resultados.
FETCH cursor_name INTO...

Jair Villao Gmez

El ltimo paso consiste en cerrar el cursor utilizando la sentencia CLOSE.


CLOSE cursor_name

Una vez un cursor est cerrado puede reabrirse de nuevo, lo cual implica
que la consulta es reevaluada y se crea un nuevo set de resultados.

Atributos de Cursores

Utilice el atributo de cursor %ISOPEN antes de ejecutar una


recuperacin para comprobar si el cursor est abierto.
Utilice %ROWCOUNT para recuperar un nmero exacto de filas.
Utilice %NOTFOUND para determinar cundo salir del bucle de lectura
del cursor.
Antes de la primera recuperacin, %NOTFOUND es NULL, as que si
FETCH no se ejecuta nunca satisfactoriamente, no se saldra nunca del bucle
de lectura.

Bucles FOR de Cursor


FOR nombre_registro IN nombre_cursor LOOP sentencia1;
END LOOP;

Cursores con Parmetros


CURSOR nombre_cursor
(nombre_parametro tipo_de dato,)
IS SENTENCIA_SELECT;

Jair Villao Gmez


Permite abrir un cursor varias veces con un juego activo distinto cada vez.

Desventajas de los cursores


Recuperar una fila del cursor puede resultar en un retraso, conocido en
ingls como network round trip, y que se debe al tiempo necesario para
enviar la peticin al SGBD y esperar los datos. Ello supone la utilizacin de
mucho ms ancho de banda de la red de lo que se necesitara por norma
general para ejecutar una sola sentencia SQL como DELETE. Repetidos
network round trips pueden suponer un impacto severo en la velocidad de
operacin del cursor. Algunos SGBD intentan minimizar este impacto
utilizando el fetch de bloque. Un fetch de bloque implica que se envan
mltiples filas o registros de forma conjunta desde el servidor al cliente. El
cliente almacena el bloque de fila en un buffer local y recupera las filas
desde el mismo hasta que el buffer est vaco.

Bibliografia
http://basededatossuper22.blogspot.com/p/cursores.html
http://technet.microsoft.com/es-es/library/ms191179(v=sql.110).aspx
http://www.mundoracle.com/cursores.html?Pg=sql_plsql_13.htm

You might also like