UNIVERSIDAD POLITECNICA AMAZONICA
INGENIERÍA DE SISTEMAS Y TELEMÁTICAS
Docente : Marco Aurelio Porro Chulli
Asignatura :BASE DE DATOS II.
Ciclo : VIII "A"
Integrantes : Yanina Bustamante Jibaja.
Yenny Isabel Cuello Morón.
CURSORES
1. Contenido
Ø
Definición
Es un elemento que representará a un conjunto de
datos determinado por una consulta T-SQL, el cursor permitirá recorrer fila a
fila, leer y eventualmente modificar dicho conjunto de resultados.
Las operaciones de una base de datos relacional
actúan en un conjunto completo de filas. Por ejemplo, el conjunto de filas que
devuelve una instrucción SELECT está compuesto por todas las filas que
satisfacen las condiciones de la cláusula WHERE de la instrucción.
Este conjunto completo de filas que devuelve la
instrucción se conoce como conjunto de resultados. Las aplicaciones,
especialmente las aplicaciones interactivas en línea no siempre trabajan de
forma eficaz con el conjunto de resultados completo si lo toman como una
unidad. Estas aplicaciones necesitan un mecanismo que trabaje con una fila o un
pequeño bloque de filas cada vez. Los cursores son una extensión de los
conjuntos de resultados que proporcionan dicho mecanismo.
DECLARE
cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR
select_statement
[ FOR { READ
ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL
Extended Syntax
DECLARE
cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY |
SCROLL ]
[ STATIC |
KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY |
SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR
select_statement
[ FOR UPDATE [
OF column_name [ ,...n ] ] ]
[;]
Ø Administración de Procedimientos Almacenados (Creación, Modificación y Eliminación)
La
sintaxis de declaración de un cursor es la siguiente
declare cursor prueba _ cursor for
select nombres apellidos, from persona
ahora
declaramos las variables con las que vamos a recorrer el cursor
declare @ nombres varchar(25)
declare @ apellidos varchar(25)
Abrimos
el cursor para iniciar el recorrido del mismo
open cursor_ prueba
Se mueve
al siguiente registro dentro del cursor y los asignamos a las variables antes
declaradas
fetch next from cursor_ prueba
into @ , nombres apellidos
Retorna
el estatus del último registro recorrido en el cursor cuando es igual a
encontró registros pendientes de recorrer
while @@ _ fetch status = 0
begin
print' : ' El Nombre de la persona es + @ + nombres
' : ' y sus apellidos + apellidos
Se mueve
al siguiente registro dentro del cursor
fetch next from cursor_ prueba
into @ , nombres apellidos
end
Cuando
concluimos con el recorrido del cursor este debe ser cerrado y luego destruido mediante
las siguientes sentencias
close cursor_ prueba
Deallocate cursor_ prueba
Modificación de Cursores
Sintaxis
simplificada
update table_name
set column1 = { expression | select_statement }
[, column2 = { expression | select_statement } ...]
where current of cursor_name
Ejemplo
update titles
set title = "The Executive’s Database
Guide"
where current of biz_book
Eliminación
de Cursores
Sintaxis
simplificada
delete [ from ] table_name where current of
cursor_name
Ejemplo
delete from titles
where current of biz_book
Ø EJEMPLOS
Crear un
cursor que permita visualizar los registros de la tabla TbCliente
DECLARE @col1 char(8),@col2 Varchar(40),@col3
Varchar(40)
DECLARE c_Clientes CURSOR FOR
SELECT codcliente,nombre,direccion FROM TbCliente
-- Apertura del cursor
OPEN c_Clientes
FETCH c_Clientes INTO @col1,@col2,@col3
WHILE (@@FETCH_STATUS = 0 )
BEGIN
PRINT @col1 + ' | ' +@col2 + ' | ' + @col3
-- Lectura de la siguiente fila del cursor
FETCH c_Clientes INTO @col1,@col2,@col3
END
-- Cierre del cursor
CLOSE c_Clientes
-- Liberar los recursos
DEALLOCATE c_Clientes
Crear un
cursor que muestre el último registro de la Tabla
TbEmpleado
DECLARE c_Empleado SCROLL CURSOR
FOR SELECT * FROM TbEmpleado Order BY Nombre
OPEN c_Empleado
/*Ultimo Registro*/
FETCH LAST FROM c_Empleado
CLOSE c_Empleado
DEALLOCATE c_Empleado
2. Resumen
Es
una estructura de control utilizada para el recorrido (y potencial
procesamiento) 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 programación sufren de lo que en inglés se conoce como
impedance mismatch.
Por
norma general los lenguajes de programación son procedurales y no disponen de
ningún mecanismo para manipular conjuntos de datos en una sola instrucción.
Debido a ello, las filas deben ser procesadas de forma secuencial por la
aplicación.
La
creación y utilización de un cursor estará compuesta, como es de esperarse, por
una serie de instrucciones T-SQL, las cuales podrán separarse en grupos bien
diferenciados, los cuales son: Declaración, Apertura, Acceso a datos, Cierre y
Desalojo, a continuación, detallaremos cada grupo de instrucciones.
3. Summary
It
is a control structure used for the travel (and potential processing) of the
records of the result of a query.
A
cursor is used for the individual processing of the rows returned by the
database manager system for a query. It is necessary because many programming
languages suffer from what is in English known as impedance impedance.
As
a general rule, programming languages are procedures and there are no
mechanisms to manipulate datasets in a single instruction. Because of this, the
rows must be processed sequentially by the application.
The
creation and use of a cursor, with a series of instructions, T-SQL, which can
be separated into well-differentiated groups, which are: Declaration, Opening,
Access to data, Closure and Eviction, a continuation we will detail each group
of instructions .
4. Recomendaciones
Si
la consulta utiliza cursores, determina antes si es posible escribirla con un
tipo de cursor más eficaz (uno de avance rápido) o con una única consulta. Las
consultas únicas mejoran las operaciones de cursor.
Dado
que un conjunto de instrucciones de cursor suele constituir una operación de
bucle externo, en la que cada fila se procesa una vez con una instrucción
interna, puedes contemplar la posibilidad de usar en su lugar una instrucción
GROUP BY o CASE. Quizá incluso una subconsulta.
5. Conclusiones
Usar
cursores nos puede simplificar mucho la tarea de programar un script en otro
lenguaje de programación para acabar haciendo lo mismo que con un cursor
programador directamente sobre T-SQL, que además se ejecutará más rápido.
Los
cursores son muy útiles sobre todo cuando no podemos tener todas las columnas
que necesitamos en un solo SELECT. Si podemos tener a todas las columnas en un
solo SELECT puede ser más práctico usar el comando SELECT … INTO
Eficacia:
El optimizador de consultas selecciona automáticamente el plan de consulta
adecuado para que el desarrollador no tenga que diseñar un algoritmo complejo
para tener acceso a los datos necesarios.
Adaptabilidad: A medida que los índices o
cambios de datos se agregan o eliminan, el optimizador de consultas adapta
automáticamente su comportamiento utilizando planes alternativos.
Menos errores: En lugar de que el
desarrollador controle los datos y los algoritmos de la aplicación, el SQL
Server Compact 4.0 Motor de base de datos admite de forma nativa las
operaciones necesarias.
6. Apreciación del Equipo
Utilizar cursores es muy práctico ya que nos permite
por ejemplo, trabajar con los datos de una fila, operar sobre esos datos y por
ejemplo, actualizar el registro, con el resultado de las operaciones. Para dar
un mejor ejemplo, para realizar una actualización de unos registros que deben
tomar el valor calculado en función de otros datos del mismo registro.
7. Glosario de Términos
INSENSITIVE: Define un cursor que hace una copia temporal
de los datos que utiliza.
SCROLL: Especifica que están
disponibles todas las opciones de captura (FIRST, LAST, PRIOR, NEXT, RELATIVE,
ABSOLUTE).
BEGIN: Incluye una serie de instrucciones de
Transact-SQL para que se pueda ejecutar un grupo de instrucciones de
Transact-SQL. BEGIN y END son palabras clave del lenguaje de control de flujo.
CURSOR_NAME: Es el nombre del cursor de
servidor de Transact-SQL definido.
READ ONLY: Evita que se efectúen
actualizaciones a través de este cursor. No es posible hacer referencia al
cursor en una cláusula WHERE CURRENT OF de una instrucción UPDATE o
DELETE.rsor_name debe cumplir las reglas de los identificadores.
UPDATE [OF column_name [,...n]]: Define las columnas actualizables en el
cursor. Si se especifica OF column_name [,...n], solo las columnas enumeradas
admiten modificaciones.
GLOBAL: Especifica
que el ámbito del cursor es global para la conexión. Puede hacerse referencia
al nombre del cursor en cualquier procedimiento almacenado o proceso por lotes
que se ejecute en la conexión.
LOCAL: Especifica
que el ámbito del cursor es local para el proceso por lotes, el procedimiento
almacenado o el desencadenador en que se creó el cursor.
DEALLOCATE: Quita
una referencia a un cursor. Cuando se ha desasignado la última referencia al
cursor.
FETCH: Recupera una fila específica de un
cursor del servidor Transact-SQL.
8. Linkografías
No hay comentarios:
Publicar un comentario