Oracle PL / SQL Cursor: implicito, esplicito, Cursor FOR Loop (esempio)

Sommario:

Anonim

Cos'è CURSOR in PL / SQL?

Un cursore è un puntatore a quest'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 di contesto tramite il cursore. Un cursore contiene le righe restituite dall'istruzione SQL. L'insieme di righe trattenuto dal cursore viene definito insieme attivo. Questi cursori possono anche essere denominati in modo che possano essere indicati da un altro punto del codice.

In questo tutorial imparerai-

  • Cursore implicito
  • Cursore esplicito
  • Attributi del cursore
  • Istruzione FOR 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 denominati e, quindi, non possono essere controllati o indicati da un altro punto del codice. Possiamo fare riferimento solo al cursore più recente tramite gli attributi del cursore.

Cursore esplicito

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

Di seguito sono riportati i passaggi necessari per lavorare con i cursori espliciti.

  • Dichiarare il cursore

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

  • Cursore di apertura

    L'apertura del cursore indicherà a 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 archiviate nella memoria allocata. Questi sono ora chiamati come set attivi. Il recupero dei dati dal cursore è un'attività a livello di record, il che significa che possiamo accedere ai dati in modo record per record.

    Ogni istruzione fetch recupererà un set attivo e conserverà le informazioni di quel particolare record. Questa istruzione è uguale all'istruzione "SELECT" che recupera il record e lo assegna alla variabile nella clausola "INTO", ma non genera eccezioni.

  • Chiusura del cursore

    Una volta recuperato tutto il record, è necessario chiudere il cursore in modo che la memoria allocata a quest'area di contesto venga rilasciata.

Sintassi:

DECLARECURSOR  IS ;BEGINFOR I IN 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 viene impostato nel ciclo FOR e la variabile del ciclo 'I' si comporterà come variabile del cursore in questo caso.

Esempio 1 : in questo esempio, proietteremo tutto il nome del dipendente dalla tabella emp utilizzando un ciclo FOR cursore.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Produzione

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Spiegazione del codice:

  • Riga di codice 2 : dichiarazione del cursore guru99_det per l'istruzione "SELECT emp_name FROM emp".
  • Riga di codice 4 : costruzione del ciclo "FOR" per il cursore con la variabile di ciclo lv_emp_name.
  • Riga di codice 5: stampa del nome del dipendente in ogni iterazione del ciclo.
  • Riga di codice 8: Esci dal ciclo

Nota: nel ciclo Cursor-FOR, gli attributi del cursore non possono essere utilizzati poiché l'apertura, il recupero e la chiusura del cursore vengono eseguiti implicitamente dal ciclo FOR.