lunes, 14 de mayo de 2018

CURSORES



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

Link de las diapositivas





No hay comentarios:

Publicar un comentario