Tutorial del cursore MySQL e codice di esempio

Tutorial del cursore MySQL e codice di esempio
Questo tutorial ti darà una rapida ripartizione dell'utilizzo di cursori MySQL in una procedura memorizzata, funzioni memorizzate o scatenanti per il risultato di un risultato dall'istruzione selezionata.

Nella maggior parte dei casi, durante l'esecuzione di query SQL utilizzando MySQL Shell o MySQL Workbench, non salviamo i risultati, anche se abbiamo la funzionalità per salvare i risultati elaborati dal server utilizzando una procedura memorizzata.

In questo tutorial, non discuterò di procedure, funzioni o trigger memorizzati. Invece, mi immergerò semplicemente nel mostrarti come puoi usare i cursori MySQL per eseguire i risultati nelle procedure memorizzate.

Prima di iniziare a creare e usare un cursore con esempi, prendiamo un momento per discutere alcuni punti chiave su un cursore di cui dovresti essere consapevole:

Caratteristiche di un cursore MySQL

  1. Un cursore è di sola lettura e non può aggiornare o rimuovere i dati nel set di risultati dalla procedura.
  2. Un cursore deve essere dichiarato prima che possa essere utilizzato. La definizione del cursore è solo un passo per dire a MySQL che esiste un tale cursore e non si recupera e dati.
  3. È possibile recuperare i dati solo nell'ordine specificato dall'istruzione SELECT e non in alcun ordine inverso, comunemente noto come non scortevole.
  4. Si utilizza un cursore aprendolo e quindi eseguire operazioni di recupero sui dati memorizzati.
  5. È necessario chiudere un cursore dopo la complezione delle operazioni di recupero.

Ora che sappiamo cosa significa un cursore, possiamo iniziare a illustrare come funziona usando esempi del mondo reale:

Uso di base

La sintassi generale per dichiarare un cursore in MySQL è semplice. Iniziamo utilizzando la parola chiave Dichiarazione come mostrato nella query di esempio di seguito:

Come dichiarare un cursore

Dichiarare cursore cursore_name per select_expression;

Il cursore_name è il nome dato al cursore durante la dichiarazione. Si noti che la dichiarazione di un cursore dovrebbe essere dopo qualsiasi variabile dichiarata per impedire a MySQL di causare errori.

Il prossimo è il Select_Expression, che memorizza l'istruzione SELECT associata al cursore.

Come aprire un cursore

Una volta dichiarato un cursore e MySQL è consapevole che esiste il cursore, possiamo iniziare a usarlo che richiede l'apertura del cursore.

La sintassi generale per aprire un cursore è come mostrato nella query seguente:

Cursor_name aperto;

Questo comando apre i cursori a cui si fa riferimento e si può iniziare a usarlo.

Come recuperare i dati

Avere il cursore aperto consente di recuperare le informazioni memorizzate in una procedura, una funzione o un trigger.

La sintassi generale per recuperare i dati utilizzando un cursore è mostrata:

Fetch Cursor_Name in variabili;

NOTA: Come accennato, assicurarsi che il cursore venga utilizzato dopo che le variabili siano dichiarate per evitare errori.

Come chiudere e rilasciare un cursore

Una volta completate le operazioni che richiedono il cursore definito, è meglio chiudere il cursore che libera la memoria associata ad esso.

Una volta che un cursore è stato chiuso, un utente deve riaprire il cursore utilizzando le parole chiave aperte (mostrato sopra) prima di utilizzare il cursore.

Non è necessario dichiarare il cursore dopo la dichiarazione stretta.

La sintassi generale per chiudere un cursore è come mostrato nella query seguente:

Chiudere cursore_name;

Gestione degli errori

Il cursore MySQL funziona leggendo ricorsivamente la riga successiva nel set di risultati. Se la riga successiva non è disponibile, il cursore chiuderà e non restituirà i dati se non specificato. Questo può essere un problema soprattutto dopo che il cursore ha raggiunto la fine del risultato.

Come soluzione, viene definito un gestore non trovato. Ciò specifica l'azione da intraprendere se la riga successiva non viene trovata.

La sintassi generale per la gestione degli errori quando si utilizza un cursore è:

Dichiarare Continua gestore non trovato set termini = true;

Il valore terminale è una variabile utilizzata per specificare che il cursore ha raggiunto la fine del risultato. Il nome della variabile può essere qualsiasi nome finché si adatta alla convenzione di denominazione della variabile MySQL.

NOTA: Come tutte le variabili utilizzate in un cursore, deve essere definita prima che venga utilizzato nel cursore.

Esempio di utilizzo

Creiamo un cursore che raccoglie le e -mail dei clienti disponibili nella tabella dei clienti del database di esempio Sakila.

La risorsa per il download e l'installazione del database Sakila è di seguito:

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

Quanto segue illustra una procedura che utilizza un cursore per recuperare le e -mail:

Usa Sakila;
Delimitatore $$
Creare procedura createnewsletter (
E -mail inout varchar (4000)
)
INIZIO
Dichiarare terminare INT predefinito falso;
Dichiarare emailddr varchar (255) predefinito "";
Dichiara il cursore di collezione_email per la selezione e -mail da Sakila.Cliente dove (indirizzo_id> 100 e indirizzo_id < 200);
Dichiara Continua il gestore per non trovato set Terminite = true;
Open Collect_Email;
GetEmails: Loop
Fetch Collect_Email in emailAddr;
Se termini = vero allora
Lascia getEmails;
FINISCI SE;
Imposta email = concat (emailddr, "|", email);
GetEmails End Loop;
Chiudere collection_email;
Fine $$
Delimitatore;
Set @emails = "";
Chiamare createnewsletter (@collect_email);
Seleziona @collect_email;

Una volta eseguita la query, otterrai un output come mostrato di seguito:

Conclusione

In questo tutorial, abbiamo attraversato utilizzando i cursori MySQL per analizzare i dati memorizzati nel set di risultati. Considera la documentazione per padroneggiare come implementare i cursori.