Articles

Oracle PL/SQL Cursor: implicito, esplicito, Cursore PER Loop [Esempio]

Che cos’è il CURSORE in PL/SQL?

Un cursore è un puntatore a questa area di contesto. Oracle crea un’area di contesto per l’elaborazione di un’istruzione SQL che contiene tutte le informazioni sull’istruzione.

PL / SQL consente al programmatore di controllare l’area del contesto attraverso il cursore. Un cursore contiene le righe restituite dall’istruzione SQL. Il set di righe che il cursore contiene è indicato come set attivo., Questi cursori possono anche essere nominati in modo che possano essere indirizzati da un’altra posizione del codice.

In questo tutorial imparerai –

  • Cursore implicito
  • Cursore esplicito
  • Attributi del cursore
  • PER l’istruzione Loop Cursor

Il cursore è di due tipi.

  • Cursore implicito
  • Cursore esplicito

Cursore implicito

Ogni volta che si verificano operazioni DML nel database, viene creato un cursore implicito che contiene le righe interessate, in quella particolare operazione., Questi cursori non possono essere nominati e, quindi, non possono essere controllati o riferiti da un’altra posizione del codice. Possiamo fare riferimento solo al cursore più recente attraverso gli attributi del cursore.

Cursore esplicito

I programmatori possono creare un’area di contesto denominata per eseguire le loro operazioni DML per ottenere un maggiore controllo su di essa. Il cursore esplicito deve essere definito nella sezione dichiarazione del blocco PL/SQL e viene creato per l’istruzione’ SELECT ‘ che deve essere utilizzata nel codice.

Di seguito sono riportati i passaggi coinvolti nel lavoro con cursori espliciti.,

  • Dichiarare il cursore

    Dichiarare il cursore significa semplicemente creare un’area di contesto denominata per l’istruzione ‘SELECT’ definita nella parte della dichiarazione. Il nome di questa area di contesto è uguale al nome del cursore.

  • Apertura del cursore

    L’apertura del cursore indica al PL / SQL di allocare la memoria per questo cursore. Renderà il cursore pronto per recuperare i record.

  • Recupero dei dati dal cursore

    In questo processo, viene eseguita l’istruzione ‘SELECT’ e le righe recuperate vengono memorizzate nella memoria allocata., Questi sono ora chiamati come set attivi. Il recupero dei dati dal cursore è un’attività a livello di record che significa che possiamo accedere ai dati in modo record per record.

    Ogni istruzione fetch recupererà un set attivo e contiene le informazioni di quel particolare record. Questa istruzione è uguale all’istruzione ‘ SELECT ‘che recupera il record e assegna alla variabile nella clausola’ INTO’, ma non genererà eccezioni.

  • Chiusura del cursore

    Una volta recuperato tutto il record, dobbiamo chiudere il cursore in modo che la memoria allocata a questa area di contesto venga rilasciata.,

Sintassi:

  • Nella sintassi precedente, la parte dichiarazione contiene la dichiarazione del cursore e la variabile cursore in cui verranno assegnati i dati recuperati.
  • Il cursore viene creato per l’istruzione ‘SELECT’ fornita nella dichiarazione del cursore.
  • Nella parte di esecuzione, il cursore dichiarato viene aperto, recuperato e chiuso.

Attributi del cursore

Sia il cursore implicito che il cursore esplicito hanno determinati attributi a cui è possibile accedere. Questi attributi forniscono ulteriori informazioni sulle operazioni del cursore., Di seguito sono riportati i diversi attributi del cursore e il loro utilizzo.

Attributo cursore Descrizione
%FOUND Restituisce il risultato booleano ‘TRUE’ se l’operazione di recupero più recente ha recuperato un record con successo, altrimenti restituirà FALSE.
%NOTFOUND Funziona in modo opposto a %FOUND restituirà ‘TRUE’ se l’operazione di recupero più recente non è in grado di recuperare alcun record.,
%ISOPEN Restituisce il risultato booleano ‘TRUE’ se il cursore dato è già aperto, altrimenti restituisce ‘FALSE’
%ROWCOUNT Restituisce il valore numerico. Fornisce il conteggio effettivo dei record che sono stati influenzati dall’attività DML.

Esempio 1: In questo esempio, vedremo come dichiarare, aprire, recuperare e chiudere il cursore esplicito.

Proietteremo tutto il nome del dipendente dalla tabella emp usando un cursore., Useremo anche l’attributo cursore per impostare il ciclo per recuperare tutto il record dal cursore.

Output

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3

Spiegazione del codice:

  • Linea di codice 2: Dichiarare il cursore guru99_det per l’istruzione ‘SELECT emp_name FROM emp’.
  • Linea di codice 3: Dichiarazione della variabile lv_emp_name.
  • Codice linea 5: Apertura del cursore guru99_det.
  • Linea di codice 6: Impostazione dell’istruzione loop di base per recuperare tutti i record nella tabella ‘emp’.,
  • Linea di codice 7: Recupera i dati guru99_det e assegna il valore a lv_emp_name.
  • Linea di codice 9: Utilizzo dell’attributo cursore ‘%NOTFOUND’ per scoprire se tutti i record nel cursore sono stati recuperati. Se recuperato, restituirà “TRUE” e il controllo uscirà dal ciclo, altrimenti il controllo continuerà a recuperare i dati dal cursore e stampare i dati.
  • Linea di codice 11: condizione di uscita per l’istruzione loop.
  • Linea di codice 12: Stampa il nome del dipendente recuperato.,
  • Linea di codice 14: Utilizzo dell’attributo cursore ‘% ROWCOUNT ‘ per trovare il numero totale di record che sono stati colpiti/recuperati nel cursore.
  • Code line 15: Dopo essere usciti dal loop il cursore viene chiuso e la memoria allocata viene liberata.

PER l’istruzione Loop Cursor

L’istruzione”FOR LOOP” può essere utilizzata per lavorare con i cursori. Possiamo dare il nome del cursore invece del limite di intervallo nell’istruzione FOR loop in modo che il ciclo funzioni dal primo record del cursore all’ultimo record del cursore., La variabile del cursore, l’apertura del cursore, il recupero e la chiusura del cursore saranno eseguiti implicitamente dal ciclo FOR.

Sintassi:

DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
  • Nella sintassi precedente, la parte della dichiarazione contiene la dichiarazione del cursore.
  • Il cursore viene creato per l’istruzione ‘SELECT’ fornita nella dichiarazione del cursore.
  • Nella parte di esecuzione, il cursore dichiarato è impostato nel ciclo FOR e la variabile loop ‘I’ si comporterà come variabile cursore in questo caso.,

Esempio 1: In questo esempio, proietteremo tutto il nome del dipendente dalla tabella emp usando un ciclo cursor-FOR.

Output

Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY

Spiegazione del codice:

  • Linea di codice 2: Dichiarare il cursore guru99_det per l’istruzione ‘SELECT emp_name FROM emp’.
  • Code line 4: Costruire il ciclo ‘ FOR ‘ per il cursore con la variabile loop lv_emp_name.
  • Linea di codice 5: stampa del nome del dipendente in ogni iterazione del ciclo.,
  • Code line 8: Exit the loop

Nota: In Cursor-FOR loop, gli attributi del cursore non possono essere utilizzati poiché l’apertura, il recupero e la chiusura del cursore vengono eseguiti implicitamente da FOR loop.