Tutorial de cursor mysql y código de ejemplo

Tutorial de cursor mysql y código de ejemplo
Este tutorial le dará un desglose rápido del uso de MySQL Cursors en un procedimiento almacenado, funciones almacenadas o desencadenantes para ejecutar un resultado de la declaración SELECT.

En la mayoría de los casos, al ejecutar consultas SQL utilizando MySQL Shell o MySQL Workbench, no guardamos los resultados, a pesar de que tenemos la funcionalidad para guardar los resultados procesados ​​por el servidor utilizando un procedimiento almacenado.

En este tutorial, no discutiré procedimientos, funciones o desencadenantes almacenados. En cambio, simplemente me sumergiré para mostrarle cómo puede usar los cursores de MySQL para ejecutar los resultados en los procedimientos almacenados.

Antes de comenzar a crear y usar un cursor con ejemplos, tomemos un momento para discutir algunos puntos clave sobre un cursor que debe tener en cuenta:

Características de un cursor mysql

  1. Un cursor es de solo lectura y no puede actualizar o eliminar datos en el conjunto de resultados del procedimiento.
  2. Se debe declarar un cursor antes de que pueda usarse. La definición del cursor es solo un paso para decirle a MySQL que tal cursor existe y no se recuperan y los datos.
  3. Solo puede recuperar datos en el pedido especificado por la instrucción SELECT y no en ningún orden inverso, comúnmente conocido como no scrollable.
  4. Utiliza un cursor abriéndolo y luego realiza operaciones de búsqueda en los datos almacenados.
  5. Debe cerrar un cursor después de completar las operaciones de búsqueda.

Ahora que sabemos lo que significa un cursor, podemos comenzar a ilustrar cómo funciona usando ejemplos del mundo real:

Uso básico

La sintaxis general para declarar un cursor en mysql es sencillo. Comenzamos usando la palabra clave declarar como se muestra en la consulta de muestra a continuación:

Cómo declarar un cursor

Declarar cursor_name cursor para select_expression;

El cursor_name es el nombre dado al cursor durante la declaración. Observe que la declaración de un cursor debe ser después de cualquier variable declarada para evitar que MySQL resulte en errores.

El siguiente es el select_expression, que almacena la instrucción SELECT asociada con el cursor.

Cómo abrir un cursor

Una vez que tenemos un cursor declarado y MySQL es consciente de que el cursor existe, podemos comenzar a usarlo, lo que requiere que se abra el cursor.

La sintaxis general para abrir un cursor es como se muestra en la consulta a continuación:

Abrir cursor_name;

Este comando abre los cursores a los que se hace referencia por su nombre y uno puede comenzar a usarlo.

Cómo recuperar datos

Tener el cursor abierto le permite obtener la información almacenada en un procedimiento, una función o un disparador.

La sintaxis general para obtener datos utilizando un cursor es como se muestra:

Buscar cursor_name en variables;

NOTA: Como se mencionó, asegúrese de que el cursor se use después de que se declaren las variables para evitar errores.

Cómo cerrar y liberar un cursor

Una vez que se completan las operaciones que requieren el cursor definido, es mejor cerrar el cursor que libera la memoria asociada con él.

Una vez que se ha cerrado un cursor, un usuario necesita volver a abrir el cursor utilizando las palabras clave abiertas (que se muestran arriba) antes de usar el cursor.

No necesita declarar el cursor después de la declaración cerrada.

La sintaxis general para cerrar un cursor es como se muestra en la consulta a continuación:

Cerrar cursor_name;

Manejo de errores

El cursor mysql funciona leyendo recursivamente la siguiente fila en el conjunto de resultados. Si la siguiente fila no está disponible, el cursor cerrará y no devolverá los datos a menos que se especifiquen. Esto puede ser un problema, especialmente después de que el cursor alcanza el final del resultado.

Como solución, se define un controlador no encontrado. Esto especifica la acción a tomar si no se encuentra la siguiente fila.

La sintaxis general para el manejo de errores al usar un cursor es:

Declarar Continir Handler no encontrado establecido terminado = True;

El valor terminado es una variable utilizada para especificar que el cursor ha alcanzado el final del resultado. El nombre de la variable puede ser cualquier nombre, siempre que se ajuste a la Convención de Naming Variable MySQL.

NOTA: Al igual que todas las variables utilizadas en un cursor, debe definirse antes de que se use en el cursor.

Caso de uso de ejemplo

Permítanos crear un cursor que recopile los correos electrónicos de los clientes disponibles en la tabla de clientes de la base de datos de muestras de Sakila.

El recurso para descargar e instalar la base de datos Sakila está a continuación:

https: // dev.mysql.com/doc/sakila/en/

Lo siguiente ilustra un procedimiento que utiliza un cursor para obtener correos electrónicos:

Usa sakila;
Delimitador $$
Crear procedimiento createnewsletter (
ENOUT CORREITROS VARCHAR (4000)
)
COMENZAR
Declarar terminado int predeterminado falso;
Declarar correo electrónicoaddr varchar (255) predeterminado "";
Declare Collsor Cursor para seleccionar correo electrónico de Sakila.Cliente donde (direcciones_id> 100 y dirección_id < 200);
Declarar el controlador continuar para no encontrado set termine = true;
Abra Collect_Email;
getMails: bucle
Buscar collect_email en correo electrónicoaddr;
Si termina = verdadero entonces
Dejar getMails;
TERMINARA SI;
Establezca correos electrónicos = concat (correo electrónicoaddr, "|", correos electrónicos);
End Loop GetEmails;
Cerrar Collect_Email;
Fin $$
Delimitador;
Set @emails = "";
Llamar a CreateNeWSletter (@Collect_Email);
Seleccione @Collect_Email;

Una vez que se ejecute la consulta, obtendrá una salida como se muestra a continuación:

Conclusión

En este tutorial, pasamos el uso de MySQL Crossors para analizar los datos almacenados en el conjunto de resultados. Considere la documentación para dominar cómo implementar los cursores.