Cursores en SQL Sever


Cursores en SQL Server


Cursores en SQL Server






Cursores en SQL Server

Cuando se trabaja con la sentencia SELECT, las filas que se devuelven se conoce como conjunto de resultados. Los cursores son extensiones de este conjunto de resultados que permiten que las aplicaciones trabajen como una fila (o un pequeño grupo de filas) en vez de tener que tratar con todo el resultado como una unidad. Algunas de las funciones que desempeña los cursores son:


  • Determina una posición tomando las filas como referencia
  • Recuperar las filas que se encuentran en la posición actual del conjunto de resultados
  • Modificar los datos que se encuentran en la posición actual del conjunto de resultados.
  • Mostrar los cambios de un conjunto de resultados generados por otro usuario.
Para utilizar un cursor con Transact-DQL tiene que utilizar la declaración DECLARE CURSOR para asociar el cursor con el conjunto de resultados de la declaración Select de SQL Server. A continuación se utiliza la declaración FETCH para hacerse con un conjunto de filas.

Hay dos tipos de sintáxis para DECLARE CURSOR. La primera utiliza el estándar SQL:

DECLARE cursor_name [INSENSITIVE][SCROLL] CURSOR
FOR select-statement
[FOR {READ ONLY | UPDATE [OF column_list]}]

La segunda forma utiliza el siguiente conjunto de extensiones Transact-SQL

DECLARE cursor_name CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC]
[READ ONLY | SCROLL_LOCKS | OPTIMISTIC]
FOR select_statement
|FOR {READ ONLY | UPDATE [OF column_list]}]

Argumentos de DECLARE CURSOR


Argumento
Descripción
Cursor_name
Nombre del cursor que se va a identificar. Ha de cumplir las reglas de los identificadores
INSENSITIVE
Hace una copia temporal de los datos que se va a utilizar el cursor en tempdb y no permite que se efectué ninguna modificación
SCROLL
Especifica que está disponible todas las opciones de copia (first, last, prior, next, relative, absolute)
Select-statement
Declaración Select que define el conjunto de resultados de un cursor.
Read-only
Evita actualizaciones
Update [OF lista_columnas]
Define las columnas que se va a actualizar
Local
Define el alcance de un cursor que se utiliza como local de un archivo de comandos determinado, un procedimiento de almacenamiento o un disparador. El nombre del cursor únicamente será validado dentro del alcance que se haya definido.
Global
El alcance será global durante la conexión y volverá a su estado normal después de la desconexión.
Forward Only
El cursor únicamente se desplaza desde la primera fila hasta la última fila y no puede retroceder.
Static
Cursores de lectura. Los cambios que se efectúan en las tablas base no se reflejarán en los datos que envíen las copias del cursor.
Kayset
Miembro y orden de las filas que se utiliza cuando se abre el cursor.
Dynamic
Todos los cambios en la información de las filas serán visibles.
Scroll-Locks
Se garantiza que las actualizaciones o eliminaciones se efectúan con éxito, ya que SQL Server bloquean las filas con las que trabaja el cursor dejándolos como de lectura.
Optimistic
Coloca las actualizaciones o eliminaciones y que no se podrán realizar con éxito porque no están marcados como filas de lectura.

Una vez que se declare el cursor con Transact-SQL, únicamente podrá buscar filas utilizando la declaración FETCH, cuya sintásis es la siguiente:

FETCH
[{NEXT | PRIOR | FIRST | LAST
| ABSOLUTE {n |@var} | RELATIVE {n | @var}]
FROM ]{{ [GLOBAL] cursor_name{ | cursor_variable_name}
[INTO @variable_name [,...n]]

Next devuelve la fila que se encuentra inmediatamente después de la fila superior PRIOR hace lo mismo, pero devuelve la fila anterior. FIRST muestra la primera fila del cursor y LAST la última. ABSOLUTE muestra la n-ésima fila del cursor.

Ejemplo:

CREATE PROCEDURE S_UltCodCateg AS

    DECLARE S_UltCodCateg FROM T_Categorias
    OPEN S_ultCodCateg
    FETCH LAST FROM S_ultCodcateg
    CLOSE S_ultCodcateg
    DEALLOCATE UltCodcateg 







Comentarios

Entradas más populares de este blog

Base de datos en SQL Server por Lcdo. José Fernando Frugone Jaramillo

Borrar registros de una tabla (Delete - SQL Server)

Las subconsultas usando sentencias Select