Logo de Código Facilito
  • Inicio
  • Replays
  • Iniciar sesión
  • Crear cuenta
  • Explorar cursos
  • Bootcamps
  • Precios
  • Blog

¡Califica el Curso Profesional de Base de Datos!

Selecciona la calificación de 1 a 5 estrellas

Reporta un error

Curso Curso Profesional de Base de Datos

Video Cursores MySQL

Tipo de error

Algo salió mal al cargar el vídeo

El vídeo no pudo cargarse, hemos enviado un reporte al equipo de desarrollo, para poder solucionarlo a la brevedad.

Mientras solucionamos el problema, intenta lo siguiente para solucionar el error:

  • Recarga la página
  • Intenta reiniciar tu navegador y luego vuelve a reproducir el vídeo
  • Vacía el caché de tu navegador
  • Intenta reproducir con las extensiones del navegador deshabilitadas
  • Intenta con un navegador distinto
  • Si el problema persiste contáctanos en Discord
home Ir al inicio report_problem Reportar falla star Valorar curso

En base de datos un Cursor es un mecanismo el cual nos permite procesar fila por fila el resultado de una consulta.

Como sabemos SQL es un lenguaje orientado a conjuntos. Si nosotros deseamos alterar ciertos elementos en nuestra colección tendremos que hacerlo mediante condicione. Única y exclusivamente los elementos que cumpla con dichas condiciones podrán ser alterados. Con los cursores podremos trabajar con cada uno de los elementos (filas) de nuestra consulta sin tener que obtener nuevos conjuntos. Esto nos permitirá ser mucho más flexibles al momento de manipular la información.

Para nosotros poder hacer uso de un cursor será necesario seguir los siguientes pasos.

  • Crear un cursor a partir de una sentencia SQL.
  • Apertura del cursor.
  • Acceso a datos.
  • Cierre del cursor.

Es importante mencionar que en MySQL los cursores solo podrán ser utilizados dentro de stored procedures.

Veamos un ejemplo.

1.-Crear un stored procedure el cual incremente en 10 el número de páginas de cada libro (tabla libros). En consola debemos visualizar el título, el anterior número de páginas y el actual número de páginas de cada libro.

Bien, este ejemplo nos permitirá comprender de una mejor manera el uso de cursores.

Veamos como pudiese quedar nuestro stored procedure.

DELIMITER //

DROP PROCEDURE IF EXISTS facilito_procedure//
CREATE PROCEDURE facilito_procedure()
BEGIN

  DECLARE var_id INTEGER;
  DECLARE var_paginas INTEGER;
  DECLARE var_titulo VARCHAR(255);
  DECLARE var_final INTEGER DEFAULT 0;

  DECLARE cursor1 CURSOR FOR SELECT libro_id, titulo, paginas FROM libros;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_final = 1;

  OPEN cursor1;

  bucle: LOOP

    FETCH cursor1 INTO var_id, var_titulo, var_paginas;

    IF var_final = 1 THEN
      LEAVE bucle;
    END IF;

    UPDATE libros SET paginas = var_paginas + 10 WHERE libro_id = var_id;

    SELECT
      var_titulo AS  'titulo',
      var_paginas AS 'Anterior',
      paginas AS 'Incremento'
      FROM libros WHERE libro_id = var_id;


  END LOOP bucle;
  CLOSE cursor1;

END//
DELIMITER ;

Dentro del stored procedure lo primero que hacemos es declarar todas las variables que usaremos. En este caso como trabajaremos con el título y el número de páginas de cada libro declaró tres nuevas variables. var_id, var_paginas, var_titulo.

Para tener un control sobre la iteración de cada uno de los elementos en la consulta declaró una cuarta variable llamada var_final, cuyo valor comienza en 0.

Una vez hemos declarado todas las variables procedemos a crear nuestro cursor. El cursor se creará a partir de una consulta SQL. En este caso la consulta no es demasiado compleja, sin embargo, si así lo deseamos podemos crear un cursos a partir de una consulta con joins, order, group etc...

Con la sentencia

DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_final = 1;

Indicamos que una vez todos los elementos (filas) dentro de nuestro cursor hayan sido iterados la variable var_final tomará un nuevo valor, de 0 a 1.

Para comenzar la iteración de los elementos será necesario abrir el cursor.

OPEN cursor1;

La iteración la logramos utilizando un Loop, el cual será controlado a partir de la variable var_final.

    IF var_final = 1 THEN
            --Si ya no existen más elementos finalizamos el ciclo.
      LEAVE bucle;
    END IF;

Al nosotros usar la cláusula Fetch obtenemos el elemento (fila) actual de nuestra consulta y avanzamos al siguiente elemento.

En este caso como en nuestra consulta hemos obtenido 3 columnas (id, titulo, páginas) asignamos el valor de cada una de las columnas a nuestras variables. Es importante mencionar que los valores podrán ser asignados únicamente a variables del mismo tipo, no podremos asignar un varchar a una variable de tipo integer.

El orden es importante.

FETCH cursor1 INTO var_id, var_titulo, var_paginas;

Una vez hemos realizado todas las tareas correspondientes y se han iterado todos los elementos (filas) el siguiente paso será cerrar el cursor.

close cursor1

Para ejecutar nuestro stored prcedure ejecutaremos la siguiente sentencia.

call facilito_procedure();
  • Módulo 1 | 8 clases

    Introdución

    expand_more
    • play_circle_outline

      Clase 1

      Introducción

    • play_circle_outline

      Clase 2

      ¿Qué son las bases de datos?

    • play_circle_outline

      Clase 3

      Modelo relacional

    • play_circle_outline

      Clase 4

      Lenguaje SQL

    • play_circle_outline

      Clase 5

      Instalación MySQL windows

    • play_circle_outline

      Clase 6

      Instalación MySQL Linux

    • play_circle_outline

      Clase 7

      Instalación MySQL Mac OS

    • play_circle_outline

      Clase 8

      Restablecer contraseña root MySQL

  • Módulo 2 | 3 clases

    Servidor de base de datos

    expand_more
    • play_circle_outline

      Clase 1

      Realizar conexión con el servidor

    • play_circle_outline

      Clase 2

      Declarar variables

    • play_circle_outline

      Clase 3

      Crear base de datos

  • Módulo 3 | 10 clases

    Base de datos y tablas

    expand_more
    • play_circle_outline

      Clase 1

      Crear tablas

    • play_circle_outline

      Clase 2

      Tipos de datos

    • play_circle_outline

      Clase 3

      Listar y eliminar tablas

    • play_circle_outline

      Clase 4

      Obtener información de una tabla

    • play_circle_outline

      Clase 5

      Crear tablas a partir de otras

    • play_circle_outline

      Clase 6

      Insertar registros

    • play_circle_outline

      Clase 7

      Insertar múltiples registros

    • play_circle_outline

      Clase 8

      Ejecutar archivos .SQL

    • play_circle_outline

      Clase 9

      Condicionar sentencias

    • play_circle_outline

      Clase 10

      Consultas rápidas

  • Módulo 4 | 8 clases

    Restricciones

    expand_more
    • play_circle_outline

      Clase 1

      Restricciones

    • play_circle_outline

      Clase 2

      Valores únicos y nulos

    • play_circle_outline

      Clase 3

      Valores por defualt

    • play_circle_outline

      Clase 4

      Números positivos

    • play_circle_outline

      Clase 5

      Tipo Enum

    • play_circle_outline

      Clase 6

      Llaves primarias

    • play_circle_outline

      Clase 7

      Llaves Foraneas

    • play_circle_outline

      Clase 8

      Implementación de restricciones

  • Módulo 5 | 2 clases

    Modificar tablas

    expand_more
    • play_circle_outline

      Clase 1

      Modificar tablas

    • play_circle_outline

      Clase 2

      Modificar tablas

  • Módulo 6 | 12 clases

    Sentencias basicas

    expand_more
    • play_circle_outline

      Clase 1

      ¿Cómo se ejecutan las sentencias SQL?

    • play_circle_outline

      Clase 2

      Obtener registros mediante condiciones

    • play_circle_outline

      Clase 3

      Operadores lógicos

    • play_circle_outline

      Clase 4

      Registros nulos

    • play_circle_outline

      Clase 5

      Registros mediante rangos

    • play_circle_outline

      Clase 6

      Búsqueda por listas

    • play_circle_outline

      Clase 7

      Registros unicos

    • play_circle_outline

      Clase 8

      Alías

    • play_circle_outline

      Clase 9

      Actualizar registros

    • play_circle_outline

      Clase 10

      Eliminar registros

    • play_circle_outline

      Clase 11

      Eliminación en cascada

    • play_circle_outline

      Clase 12

      Restaurar definición de una tabla

  • Módulo 7 | 8 clases

    Funciones

    expand_more
    • play_circle_outline

      Clase 1

      Funciones en SQL

    • play_circle_outline

      Clase 2

      Funciones sobre strings

    • play_circle_outline

      Clase 3

      Funciones sobre números

    • play_circle_outline

      Clase 4

      Funciones sobre fechas

    • play_circle_outline

      Clase 5

      Funciones sobre condiciones

    • play_circle_outline

      Clase 6

      Crear función

    • play_circle_outline

      Clase 7

      Listar funciones

    • play_circle_outline

      Clase 8

      Ejecutar sentencias dentro de funciones

  • Módulo 8 | 12 clases

    Sentencias avanzadas

    expand_more
    • play_circle_outline

      Clase 1

      Búsqueda mediante strings

    • play_circle_outline

      Clase 2

      Expresiones regulares

    • play_circle_outline

      Clase 3

      Ordenar registros

    • play_circle_outline

      Clase 4

      Limitar registros

    • play_circle_outline

      Clase 5

      ¿Qué son las funciones de agreación?

    • play_circle_outline

      Clase 6

      Funciones de agregación

    • play_circle_outline

      Clase 7

      Agrupamiento

    • play_circle_outline

      Clase 8

      Condiciones bajo agrupamiento

    • play_circle_outline

      Clase 9

      Unir resultados

    • play_circle_outline

      Clase 10

      Sub consultas

    • play_circle_outline

      Clase 11

      Validar registros

    • play_circle_outline

      Clase 12

      Ejercicios

  • Módulo 9 | 7 clases

    Joins

    expand_more
    • play_circle_outline

      Clase 1

      Trabajo con múltiples tablas

    • play_circle_outline

      Clase 2

      Inner join

    • play_circle_outline

      Clase 3

      Sub clausula using

    • play_circle_outline

      Clase 4

      Left Join

    • play_circle_outline

      Clase 5

      Right Join

    • play_circle_outline

      Clase 6

      Múltiples joins

    • play_circle_outline

      Clase 7

      Productos cartesianos

  • Módulo 10 | 4 clases

    Vistas

    expand_more
    • play_circle_outline

      Clase 1

      Vistas

    • play_circle_outline

      Clase 2

      Crear vistas

    • play_circle_outline

      Clase 3

      Editar vistas

    • play_circle_outline

      Clase 4

      Ejercicios parte 2

  • Módulo 11 | 7 clases

    Procedimientos

    expand_more
    • play_circle_outline

      Clase 1

      Procedimientos almacenados

    • play_circle_outline

      Clase 2

      Crear procedimientos

    • play_circle_outline

      Clase 3

      Eliminar procedimientos

    • play_circle_outline

      Clase 4

      Obtener valores

    • play_circle_outline

      Clase 5

      Condicionales

    • play_circle_outline

      Clase 6

      Casos

    • play_circle_outline

      Clase 7

      Ciclos

  • Módulo 12 | 4 clases

    Transacciones

    expand_more
    • play_circle_outline

      Clase 1

      Bloqueo de tablas

    • play_circle_outline

      Clase 2

      Transacciones

    • play_circle_outline

      Clase 3

      Implementar transacciones

    • play_circle_outline

      Clase 4

      Transacciones y store procedures

  • Módulo 13 | 5 clases

    Extras

    expand_more
    • play_circle_outline

      Clase 1

      Motores de almacenamiento en MySQL

    • play_circle_outline

      Clase 2

      Eventos MySQL

    • play_arrow

      Clase 3

      Cursores MySQL

    • play_circle_outline

      Clase 4

      Respaldo de información

    • play_circle_outline

      Clase 5

      Asignar permisos a usuarios MySQL

  • Módulo 14 | 5 clases

    Triggers

    expand_more
    • play_circle_outline

      Clase 1

      Triggers Mysql

    • play_circle_outline

      Clase 2

      Creación de Triggers

    • play_circle_outline

      Clase 3

      Evento Delete

    • play_circle_outline

      Clase 4

      Evento Update

    • play_circle_outline

      Clase 5

      Listado y eliminación de Triggers

  • check_circle_outline
    Módulo 15

    Examen del curso

    expand_more
    • done_all

      Examen

      Examen final del curso

Cursores MySQL

arrow_back Siguiente arrow_forward
Curso Profesional de Base de Datos