Tutorial do MySQL Cursor e código de exemplo

Tutorial do MySQL Cursor e código de exemplo
Este tutorial fornecerá uma rápida quebra de usar cursores MySQL em um procedimento armazenado, funções armazenadas ou gatilhos para executar o resultado da instrução SELECT.

Na maioria dos casos, ao executar consultas SQL usando o MySQL Shell ou o MySQL Workbench, não salvamos os resultados, mesmo que tenhamos a funcionalidade para salvar os resultados processados ​​pelo servidor usando um procedimento armazenado.

Neste tutorial, não discutirei procedimentos, funções ou gatilhos armazenados. Em vez disso, vou simplesmente mergulhar em como você pode usar os cursores do MySQL para executar os resultados nos procedimentos armazenados.

Antes de começarmos a criar e usar um cursor com exemplos, vamos levar um momento para discutir alguns pontos -chave sobre um cursor que você deve estar ciente:

Recursos de um cursor MySQL

  1. Um cursor é somente leitura e não pode atualizar ou remover dados no conjunto de resultados do procedimento.
  2. Um cursor precisa ser declarado antes que possa ser usado. A definição do cursor é apenas um passo para dizer ao MySQL que esse cursor existe e não recupera e dados.
  3. Você só pode recuperar dados no pedido especificado pela instrução SELECT e não em qualquer ordem inversa, comumente conhecida como não rolável.
  4. Você usa um cursor abrindo -o e depois executa operações de busca nos dados armazenados.
  5. Você deve fechar um cursor após as operações de busca completas.

Agora que sabemos o que significa um cursor, podemos começar a ilustrar como ele funciona usando exemplos do mundo real:

Uso básico

A sintaxe geral a declarar um cursor em MySQL é direta. Começamos usando a palavra -chave Declare, como mostrado na consulta de amostra abaixo:

Como declarar um cursor

Declarar cursor_name cursor para select_expression;

O Cursor_Name é o nome dado ao cursor durante a declaração. Observe que a declaração de um cursor deve estar após quaisquer variáveis ​​declaradas para impedir que o MySQL resulte em erros.

Em seguida, é o select_expression, que armazena a instrução SELECT associada ao cursor.

Como abrir um cursor

Depois de declararmos um cursor e o MySQL está ciente de que o cursor existe, podemos começar a usá -lo, o que exige que o cursor seja aberto.

A sintaxe geral para abrir um cursor é como mostrado na consulta abaixo:

Abrir cursor_name;

Este comando abre os cursores mencionados pelo seu nome e pode -se começar a usá -lo.

Como recuperar dados

Ter o cursor aberto permite buscar as informações armazenadas em um procedimento, uma função ou um gatilho.

A sintaxe geral para buscar dados usando um cursor é como mostrado:

Buscar cursor_name em variáveis;

OBSERVAÇÃO: Como mencionado, verifique se o cursor é usado após a declaração das variáveis ​​para evitar erros.

Como fechar e liberar um cursor

Depois que as operações que exigem o cursor definido são concluídas, é melhor fechar o cursor que liberta a memória associada a ele.

Depois que um cursor foi fechado, um usuário precisa reabrir o cursor usando as palavras-chave abertas (mostradas acima) antes de usar o cursor.

Você não precisa declarar o cursor após a declaração fechada.

A sintaxe geral para fechar um cursor é como mostrado na consulta abaixo:

Fechar cursor_name;

Manipulação de erros

MySQL Cursor funciona lendo recursivamente a próxima linha no conjunto de resultados. Se a próxima linha não estiver disponível, o cursor fechará e não retornará os dados, a menos que especificado. Isso pode ser um problema, especialmente depois que o cursor chegar ao final do resultado.

Como solução, um manipulador não encontrado é definido. Isso especifica a ação a ser tomada se a próxima linha não for encontrada.

A sintaxe geral para manuseio de erros ao usar um cursor é:

Declarar o manipulador de continuação não encontrado definido termine = true;

O valor do término é uma variável usada para especificar que o cursor chegou ao final do resultado. O nome da variável pode ser qualquer nome desde que se encaixe na Convenção de Nomeação da Variável MySQL.

OBSERVAÇÃO: Como todas as variáveis ​​usadas em um cursor, ela deve ser definida antes de ser usada no cursor.

Exemplo de uso de uso

Vamos criar um cursor que coleta os e -mails dos clientes disponíveis na tabela de clientes do banco de dados de amostra Sakila.

O recurso para baixar e instalar o banco de dados Sakila está abaixo:

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

A seguir, ilustra um procedimento que usa um cursor para buscar e -mails:

Use Sakila;
Delimitador $$
Crie procedimento CreateNewsletter (
Emails de entrada Varchar (4000)
)
COMEÇAR
Declarar encerrar o INT padrão false;
Declarar emailaddr varchar (255) padrão "";
Declare Collect_Email Cursor para selecionar email de Sakila.Cliente onde (endereço_id> 100 e endereço_id < 200);
Declarar o manipulador de continuação para não encontrado definido termine = true;
Abrir colecionamento_email;
Getemails: Loop
Buscar colecionário em e -mailAddr;
Se encerrar = true então
Deixe o Getemails;
FIM SE;
Definir emails = concat (emailaddr, "|", emails);
Final de loop getemails;
Fechar colecionamento_email;
Final $$
Delimitador;
Definir @emails = "";
Call CreateNewsLetter (@Collect_Email);
Selecione @collect_email;

Depois que a consulta for executada, você obterá uma saída como mostrado abaixo:

Conclusão

Neste tutorial, caminhamos usando cursores do MySQL para analisar os dados armazenados no conjunto de resultados. Considere a documentação para dominar como implementar os cursores.