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
Publicar un comentario