¿Qué es un cursor?
Un cursor permite acceder en tiempo real a los datos de cada fila de
una consulta. Este mecanismo es de gran utilidad cuando vayamos a
comunicar MySQL con aplicativos o realizar consultas
complejas.
Declaración
DECLARE cursor_name CURSOR FOR select_statement
Ejemplo:
DECLARE
cur1 CURSOR
FOR SELECT
id,data FROM test.t1;
Sentencia OPEN
Este comando abre un cursor declarado préviamente.
Sintaxi: OPEN cursor_name
Ejemplo: OPEN cur1;
Sentencia FETCH
La lectura de los resultados de un cursor se hace con el comando
FETCH.
Este nos permite acceder a la primera fila generada por la consulta.
Si se vuelve a usar el cursor pasa a apuntar a la segunda fila, luego
a la tercera y así sucesivamente hasta que el cursor no tenga
resultados que referenciar.
Incluir el comando FETCH
dentro de un bucle permite leer todos los resultados de un
cursor. Cuando el cursor llegue al final de los resultados de
la consulta, entonces el bucle termina. Pero terminar un bucle de
este tipo necesita una condición de parada especial en MySQL.
Sintaxi:
FETCH cursor_name INTO var_name [, var_name] ...
Ejemplo:
FETCH cur1 INTO a, b; donde DECLARE a CHAR(16); DECLARE b,c INT
Sentencia CLOSE
Una vez leído todos los resultados del cursor, procedemos a cerrar y
limpiar espacios de memoria con CLOSE.
Sintaxi: CLOSE nombre_cursor;
Ejemplo:
CLOSE cur1;
Ejemplo
BEGIN
DECLARE variable TIPOVARIABLE;
DECLARE error INT DEFAULT 0;
DECLARE cursor1 cursor for SELECT X FROM Y;
DECLARE CONTINUE handler for sqlstate '02000' set error = 1;
open cursor1;
repeat
fetch cursor1 into variable;
if not error then
[HACER ALGO]
end if;
until error end repeat;
Ejemplo típico de cursor:
ResponEliminaBEGIN
DECLARE variable TIPOVARIABLE;
DECLARE error INT DEFAULT 0;
DECLARE cursor1 cursor for SELECT X FROM Y;
DECLARE CONTINUE handler for sqlstate '02000' set error = 1;
open cursor1;
repeat
fetch cursor1 into variable;
if not error then
[HACER ALGO]
end if;
until error end repeat;
Añadido, gracias monro :)
Elimina