bd cursores
TRANSCRIPT
-
8/17/2019 BD Cursores
1/13
11/04/20
Manejo de cursores en MySql
Curso Base de Datos
11/04/2016
1
Objetivo
2
Mostrar el uso de cursores en el manejode las bases de datos
-
8/17/2019 BD Cursores
2/13
11/04/20
Contexto
3
Cuando consultamos tablascon SELECT, MySQL arrojabarápidamente los registros en pantalla deun solo golpe, sin embargo, haymomentos donde se requiere acceder acada registro de forma individual.
¿Qué es un cursor?
4
Existen unos tipos de controles llamadoscursores que son útiles para recorrer losregistros que devuelve una consulta.
Un cursor permite acceder en tiemporeal a los datos de cada fila de unaconsulta. Este mecanismo es de granutilidad cuando usamos MySQL conaplicativos
http://www.hermosaprogramacion.com/2014/05/SELECT-SQL.htmlhttp://www.hermosaprogramacion.com/2014/05/SELECT-SQL.html
-
8/17/2019 BD Cursores
3/13
11/04/20
¿Como usar Cursores en MySQL?
5
Para implementar un cursor debemosconocer 4 fases de su funcionamiento:
Declaración
Apertura
Lectura
Cierre
1. DECLARACION
6
Al igual que una variable, los cursores sedeclaran con la sentencia DECLARE.
DECLARE nombre_cursor CURSOR FOR
_______ ;
http://www.hermosaprogramacion.com/2014/06/mysql-sql-server-variables.htmlhttp://www.hermosaprogramacion.com/2014/06/mysql-sql-server-variables.html
-
8/17/2019 BD Cursores
4/13
11/04/20
1. DECLARACION
7
ejemplo:
DECLARE cursor_edad CURSOR FOR
SELECT EDAD FROM CLIENTE WHERE
NOMBRE LIKE 'a%';
2. APERTURA
8
OPEN nombre_cursor;
Al abrir el cursor este sitúa un puntero a
donde inician las filas o registros de laconsulta
-
8/17/2019 BD Cursores
5/13
11/04/20
3. LECTURA
9
FETCH nombre_cursor INTO variable1,variable2,...
3. LECTURA
10
La lectura de los resultados de un cursor sehace con el comando FETCH.
Este nos permite acceder a la primer filagenerada por la consulta.
Si se vuelve a usar el cursor pasa a apuntara la segunda fila, luego a la tercer y asísucesivamente hasta que el cursor no tengaresultados que referenciar.
-
8/17/2019 BD Cursores
6/13
11/04/20
3. LECTURA
11
Es importante tener variables declaradaspara almacenar temporalmente losdatos de las columnas de cada fila,generadas por la consulta.
Estas variables deben tener el mismo tipo de dato que el valor de la columna aalmacenar,
y luego relacionarlas con lasentencia INTO.
3. LECTURA -
12
si quisiéramos almacenar der la base dedatos hr el id , nombre y apellido delprimer empleado de la tabla employees, hacemos lo siguiente:
http://www.hermosaprogramacion.com/2014/05/tipos-datos-sql.htmlhttp://www.hermosaprogramacion.com/2014/05/tipos-datos-sql.htmlhttp://www.hermosaprogramacion.com/2014/05/tipos-datos-sql.htmlhttp://www.hermosaprogramacion.com/2014/05/tipos-datos-sql.htmlhttp://www.hermosaprogramacion.com/2014/05/tipos-datos-sql.html
-
8/17/2019 BD Cursores
7/13
11/04/20
3. LECTURA -
13
-- Debemos declarar las variables para el cursor dentro del-- trigger o PA
DECLARE ID INT;
DECLARE NOMBRE VARCHAR(100);
DECLARE APELLIDO VARCHAR(100);
DECLARE cursor_cliente CURSOR FOR SELECT employee_id,firts_name, last_name FROM employees;
OPEN cursor_cliente;
FETCH cursor_cliente INTO ID,NOMBRE,APELLIDO; CLOSEcursor_cliente;
3. LECTURA - Ejemplo
14
create procedure prueba_lectura()
BEGIN
DECLARE ID INT; DECLARE NOMBRE VARCHAR(100);
DECLARE APELLIDO VARCHAR(100);
DECLARE cursor _cliente CURSOR FOR SELECT employee_id, firSt_name, last_name FROMemployees;
OPEN cursor_cliente;
SELECT ID,NOMBRE,APELLIDO;
FETCH cursor_cliente INTO ID,NOMBRE,APELLIDO;
SELECT ID,NOMBRE,APELLIDO;CLOSE cursor_cliente;
END
//
Delimiter ;
-- para probarlo lo ejecutamos de la siguiente manera
Call procedure prueba_lectura();
-
8/17/2019 BD Cursores
8/13
11/04/20
3. LECTURA – En un ciclo
15
Si queremos recorrer todas las filas de la consulta, necesitaremosde alguna estructura repetitiva.
Incluir el comando FETCH dentro de un CICLO permite leer todoslos resultados de un cursor.
Cuando el cursor llegue al final de los resultados de la consulta,entonces el CICLO DEBERIA TERMINAR.
Pero terminar un bucle de este tipo necesita una condición deparada especial en MySQL.
3. LECTURA – En un ciclo
16
Existen manejadores de errores en MySQL paraesta tarea
Cuando usamos FETCH en el cursor, pero ya no hay masfilas por retornar, MySQL arroja un error llamado "02000
NO DATA FECH".
Así que lo que debemos hacer es crearun manejador para indicar que cuando suceda ese error,el programa no termine, pero que si termine el CICLO.
-
8/17/2019 BD Cursores
9/13
11/04/20
3. LECTURA – En un ciclo
17
Declaración de un manejador de error tipo NOTFOUND
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET @fin = TRUE;
Aquí indicamos que si ocurre un error tipo NOT
FOUND, entonces asignemos a la variable @fin elvalor de TRUE. Con esa variable podremos manejarla terminación de nuestro ciclo mas adelante.
4. CIERRE
18
Una vez leído todos los resultados delcursor, procedemos a cerrar y limpiarespacios de memoria con CLOSE.
CLOSE nombre_cursor;
-
8/17/2019 BD Cursores
10/13
-
8/17/2019 BD Cursores
11/13
11/04/20
Modelo E-R base de datos hr
21
Referencias de interés
-
8/17/2019 BD Cursores
12/13
11/04/20
Referencias de interés
23
Introduction to MySQL cursor Creación de Cursores en MySQL
Stored Procedure en MySQL (parte 2) [iterate, cursores y handlers]
Ejemplo cursores
11/04/2016
24
http://www.mysqltutorial.org/mysql-cursor/http://www.mysqltutorial.org/mysql-cursor/http://www.hermosaprogramacion.com/2014/06/mysql-cursores/http://www.hermosaprogramacion.com/2014/06/mysql-cursores/http://cassianinet.blogspot.mx/2011/06/stored-procedure-en-mysql-parte-2.htmlhttp://cassianinet.blogspot.mx/2011/06/stored-procedure-en-mysql-parte-2.htmlhttp://cassianinet.blogspot.mx/2011/06/stored-procedure-en-mysql-parte-2.htmlhttp://cassianinet.blogspot.mx/2011/06/stored-procedure-en-mysql-parte-2.htmlhttp://taller-bases-datos-itcj.blogspot.mx/2012/11/ejemplo-cursores.htmlhttp://taller-bases-datos-itcj.blogspot.mx/2012/11/ejemplo-cursores.htmlhttp://taller-bases-datos-itcj.blogspot.mx/2012/11/ejemplo-cursores.htmlhttp://cassianinet.blogspot.mx/2011/06/stored-procedure-en-mysql-parte-2.htmlhttp://www.hermosaprogramacion.com/2014/06/mysql-cursores/http://www.mysqltutorial.org/mysql-cursor/
-
8/17/2019 BD Cursores
13/13
11/04/20
Mis apuntes
25
Mis apuntes
26