Introduzione ai cursori in PL / SQL

PL / SQL è uno dei linguaggi di programmazione più utilizzati per la programmazione di database. Alcuni concetti importanti di PL / SQL devono imparare e comprendere chiaramente da un programmatore PL / SQL per usarli correttamente. Il cursore è uno di questi. Nel programma PL / SQL, le istruzioni SQL devono essere eseguite alla fine. Il cursore è proprio come un puntatore utilizzato per puntare l'area di contesto, creato da Oracle per eseguire l'istruzione SQL. Un cursore contiene tutte le righe restituite dopo l'elaborazione delle istruzioni SQL. L'insieme della riga che è detenuto dal cursore viene definito Insieme attivo. Il cursore può anche essere nominato per usarlo ulteriormente nel programma da un programmatore. In questo argomento, impareremo a conoscere i cursori in PL / SQL.

Tipi di cursori

Esistono 2 tipi di cursori utilizzati nella programmazione PL / SQL:

1. Cursori impliciti

Come indica il nome, i cursori impliciti sono quei cursori che vengono creati automaticamente da Oracle quando vengono eseguite istruzioni DML come INSERT, DELETE, UPDATE. Quando il programmatore non crea alcun cursore, Oracle da solo lo crea per contenere le righe interessate dalle istruzioni DML. Questi cursori non possono essere nominati dal programmatore e quindi non possono essere indicati e utilizzati in altri punti del codice. Anche se Oracle fornisce alcuni attributi per eseguire alcune operazioni su di esso come

% TROVATO, % NON TROVATO, % ROWCOUNT, % ISOPEN.

S.No.AttributoDescrizione
1.%TROVATORestituisce True se le istruzioni DML come INSERT,

DELETE, UPDATE influiscono su una o più righe o l'istruzione SELECT restituisce una o più righe. Altrimenti, restituisce False

2.%NON TROVATOÈ l'opposto dell'attributo% FOUND, restituisce True se nessuna delle righe è influenzata dall'istruzione DML o l'istruzione SELECT non restituisce risultati. Altrimenti, restituisce False.
3.%È APERTONel caso dei cursori impliciti, restituisce sempre False perché Oracle chiude il cursore subito dopo l'esecuzione delle istruzioni SQL.
4.% ROWCOUNTRestituisce il conteggio delle righe. Vale a dire il conteggio del numero di righe che sono interessate dal DML menzionato
istruzioni del programmatore nel codice PL / SQL come INSERT, DELETE e UPDATE o il numero di righe restituite dall'istruzione SELECT INTO.
Esempio

Scenario: aggiornare i voti di tutti gli studenti in una tabella "studente" in inglese con la colonna "materia" di 10.

DECLARE
affected_rows number(4);
BEGIN
UPDATE students SET marks = marks+10 where subject = 'English';
IF​ sql%NOTFOUND THEN dbms_output.put_line ('No records of English subject are updated');
ELSIF sql%FOUND THEN​ affected rows: = affected rows%rowcount
dbms_output.put_line('Congrats ..Records Updated' || affected_rows);
END IF;
END;
/

2. Cursori espliciti

I cursori espliciti sono quei cursori definiti dai programmatori per avere un maggiore controllo sull'Area di contesto (in cui sono archiviati i risultati delle query SQL). Questi cursori devono essere prima definiti nel blocco di dichiarazione del programma PL / SQL. Viene creato per le istruzioni SQL che restituiscono più di una riga dopo averle elaborate. Esiste una procedura specifica che deve essere seguita per l'utilizzo di un cursore esplicito. I passaggi per utilizzare il cursore esplicito sono indicati di seguito:

1. Dichiarare il cursore: viene utilizzato per assegnare un nome all'area / cursore di contesto insieme all'istruzione select che deve essere eseguita.

Sintassi

CURSOR cursor_name IS SELECT statement;

2. Apri il cursore: aprendo un cursore, alloca la memoria e rendila disponibile per recuperare i record restituiti dall'istruzione SQL.

Sintassi

OPEN cursor_name;

3. Ottieni il cursore: in questo processo, si accede a una riga alla volta. L'istruzione SELECT viene eseguita e le righe recuperate vengono archiviate nell'area di contesto. Recupera i record e li assegna a una variabile definita.

Sintassi

FETCH cursor_name INTO variable;

4. Chiudere il cursore: questo passaggio viene utilizzato per chiudere il cursore aperto sopra per deallocare la memoria una volta recuperate correttamente tutte le righe memorizzate.

Sintassi

CLOSE cursor_name;

Esempio

Scenario: recuperare il nome, l'indirizzo e la percentuale complessiva di studenti in una tabella

"studente" con colonne "nome", "indirizzo" e "percentuale"

DECLARE
stud_name student.name%type; stud_address student.address%type;
stud_percentage student.percentage%type;
CURSOR stud IS SELECT name, address, percentage FROM student; BEGIN
Open stud;
LOOP
FETCH stud into stud_name, stud_address, stud_percentage;
EXIT when stud%NOTFOUND;
dbms_ouput.put_line(stud_name || ' ' || stud_address || ' ' || stud_percentage);
END LOOP;
CLOSE stud;
END
/

Azioni del cursore

A differenza di SQL che funziona su tutte le righe in un set di risultati alla volta, il cursore viene utilizzato principalmente negli scenari in cui il programmatore desidera elaborare e recuperare i dati di una riga alla volta.

Di seguito sono riportate alcune delle azioni del cursore:

  1. Dichiara un cursore: è importante dichiarare un cursore prima di usarlo. Un cursore viene dichiarato definendo l'istruzione SQL che deve essere elaborata.
  2. Apri un cursore: dopo la dichiarazione, un cursore viene aperto e popolato dal ritorno dei dati mediante l'elaborazione dell'istruzione SQL.
  3. Recupera un cursore: dopo aver aperto il cursore, le righe di output devono essere recuperate una ad una per eseguire qualsiasi manipolazione, se necessario.
  4. Chiudi un cursore: dopo tutta la manipolazione dei dati. Un cursore creato deve essere chiuso
  5. Deallocate: questo passaggio include l'eliminazione del cursore e libera tutte le risorse in suo possesso.

Importanza del cursore in PL / SQL

Indicare la posizione della memoria ed eseguire le azioni di conseguenza è uno dei compiti importanti in qualsiasi linguaggio di programmazione. In PL / SQL, viene eseguito dai cursori. I cursori svolgono un ruolo cruciale quando si tratta di eseguire le diverse attività assegnando un nome all'area di memoria (area di contesto) in cui vengono salvati i risultati delle query SQL. Possiamo accedere ai record uno per uno ed eseguire qualsiasi manipolazione in esso, se necessario, o visualizzarlo sulla console di conseguenza. I cursori espliciti sono più efficienti, offrono un maggiore controllo programmatico e meno vulnerabili agli errori di dati, quindi sono molto utili nella programmazione PL / SQL rispetto a quelli impliciti.

Conclusione

La programmazione di database è molto popolare in questi giorni e PL / SQL è uno dei linguaggi che dovrebbero essere molto usati in esso. I cursori danno più controllo al programmatore per accedere ai dati recuperati. Perché un programmatore lavori su PL / SQL, è importante conoscere l'uso e l'importanza di Cursor per funzionare in modo efficace.

Articoli consigliati

Questa è una guida ai cursori in PL / SQL. Qui discutiamo i tipi di cursori utilizzati nella programmazione PL / SQL con le azioni del cursore e l'importanza del cursore. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più -

  1. Tipi di join in SQL
  2. Query di inserimento SQL
  3. Tabella in SQL
  4. Carattere jolly in SQL
  5. I 6 migliori tipi di join in MySQL con esempi