Introduzione ai cursori in SQL

I cursori sono aree di lavoro temporanee create nella memoria per elaborare alcuni comandi SQL su un mucchio di dati. Definizione troppo complicata? Comprendiamolo. Pensa ai cursori come a ciascun ciclo in SQL. Si desidera eseguire un'attività su un set di righe di dati, utilizzare il cursore. Supponiamo che tu abbia una tabella dei dipendenti che contiene lo stipendio per ciascun dipendente dell'organizzazione. Volete aumentare lo stipendio di ciascun dipendente di una certa percentuale. Qui è dove useresti un cursore. 'The How' è stato illustrato più avanti nell'articolo.

Pertanto, i cursori creano uno spazio di lavoro temporaneo con il set di righe selezionato e un puntatore che punta alla riga corrente. Questo set di righe, su cui il cursore eseguirà l'operazione desiderata, è chiamato Set di dati attivi. Il puntatore recupera le righe dal set di risultati uno per uno. È quindi possibile eseguire qualsiasi operazione SQL una riga alla volta.

Cursori impliciti

I cursori impliciti, come suggerisce il nome, sono generati dal parser SQL per le query DML. Le query DML sono query di manipolazione dei dati. Queste query manipolano o modificano i dati. Non interferiscono con la struttura o lo schema del database. Query come SELECT, INSERT, UPDATE e DELETE generano un cursore implicito. I cursori impliciti sono nascosti all'utente finale.

Cursori espliciti

I cursori espliciti sono cursori generati dall'utente. Quando un utente indica al parser SQL di creare un cursore per un set attivo, il cursore così creato viene chiamato cursore esplicito. Il set attivo viene definito dall'utente tramite una query SELECT. Tratteremo i cursori espliciti in dettaglio in questo articolo.

Azioni del cursore - Il ciclo di vita di un cursore

Il ciclo di vita di un cursore comporta in genere cinque fasi:

1. Dichiara: il primo passo è dichiarare un cursore. Questo passaggio indica al sistema di generare un cursore con il set di dati indicato. Il set di dati è costruito utilizzando un'istruzione SQL. A questo punto, viene creato il set attivo ma l'area di lavoro temporanea del cursore non è ancora aperta nella memoria.

2. Apri: Successivamente, al sistema viene richiesto di aprire il cursore. A questo punto, l'area di lavoro temporanea viene caricata nella memoria con il set attivo e viene generato un puntatore che punta alla prima riga del set attivo.

3. Recupera: questa è la fase ricorrente dell'intero processo. La riga corrente puntata dal puntatore viene recuperata e l'attività desiderata viene eseguita sui dati della riga. Il puntatore si sposta sulla riga successiva nel cursore.

4. Chiudi: al termine della manipolazione dei dati, il cursore deve essere chiuso.

5. Deallocate: questo è l'ultimo passaggio per eliminare il cursore e rilasciare la memoria, il processore e le altre risorse di sistema allocate al cursore.

Cursori espliciti - In azione!

Bene, ora abbiamo una conoscenza di base di cosa sono i cursori e come funzionano. È tempo di sporcarci le mani e creare noi stessi un cursore esplicito.

La terminologia dei cursori in SQL

Comprendiamo le terminologie utilizzate in questa sintassi.

Ambito del cursore

  • Cursor Scope può essere GLOBAL o LOCAL . Un cursore globale è disponibile durante la connessione. Un cursore locale è limitato all'ambito solo per le stored procedure, le funzioni o la query che contiene il cursore.
  • Questa è la funzione specifica di MS SQL Server. MySQL supporta solo cursori con ambito locale.

Movimento del cursore

  • MS SQL Server offre anche l'opzione per impostare il movimento del cursore. Può essere la modalità Forward_Only convenzionale che sposta il puntatore dalla prima riga all'ultima riga per riga. In alternativa, è possibile scorrere fino alla prima, all'ultima, alla precedente o alla successiva riga.
  • I cursori in MySQL non sono scorrevoli.

Tipo di cursore

  • Un cursore può essere statico in quanto può memorizzare nella cache l'insieme attivo fino alla deallocazione e può destreggiarsi avanti e indietro attraverso questo insieme attivo memorizzato nella cache. Un cursore può essere fast_forward solo in modalità statica.
  • Può anche essere dinamico per consentire l'aggiunta o la cancellazione di righe nel set attivo mentre il cursore è aperto. Queste modifiche non sono visibili agli altri utenti del cursore in modalità keyset. I cursori in MySQL sono solo fast_forward.

Cursor Lock

  • I blocchi cursore sono utili in un ambiente multiutente. Bloccano la riga in modo che due utenti non operino contemporaneamente sugli stessi dati. Ciò garantisce l'integrità dei dati.
  • Un blocco di sola lettura indica che la riga non può essere aggiornata.
  • I blocchi di scorrimento bloccano la riga quando vengono recuperati nel cursore assicurando che l'attività abbia esito positivo e che i dati aggiornati siano disponibili all'esterno del cursore. Tentativi ottimistici di aggiornare la riga senza alcun blocco. Pertanto, se la riga è stata aggiornata all'esterno del cursore, l'attività non avrà esito positivo.
  • MySQL supporta solo blocchi di sola lettura. Ciò significa che MySQL non aggiorna la tabella effettiva, ma copia i dati per eseguire i comandi di aggiornamento.

Quindi, vediamo che queste opzioni sono disponibili solo in MS SQL Server. Ciò rende la sintassi dei cursori MySQL ancora più semplice.

Esempio

Cerchiamo ora di aggiornare lo stipendio dei dipendenti nella nostra tabella Dipendenti.

Useremmo i seguenti dati in questi cursori nell'esempio SQL.

Il nostro codice cursore sarebbe il seguente:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

E l'output dopo aver eseguito il comando cursore sopra sarebbe:

Conclusione - Cursori in SQL

Quindi, abbiamo visto quali sono i cursori, come usarli e dove evitarli. I cursori si rivelano un'utilità utile per gli sviluppatori ma a costo delle prestazioni. Quindi, fai attenzione quando opti per i cursori.

Articoli consigliati

Questa è una guida ai cursori in SQL. Qui discutiamo i tipi, il ciclo di vita e la terminologia del cursore in SQL con esempi. Puoi anche consultare i nostri altri articoli suggeriti:

  1. Tipi di join in SQL
  2. Comando Alter SQL
  3. Visualizzazioni SQL
  4. Strumenti di gestione SQL
  5. Tipi di cursori in PL / SQL
  6. I 6 migliori tipi di join in MySQL con esempi