ASPITALIA.IT

Sito dedicato alla tecnologia web di Microsoft. Da ASP a ASP.NET trovate articoli e tutorial interessanti adatti anche a chi si av...

Leggi la Descrizione
HTML.IT

Uno dei migliori siti di programmazione presenti sul Web. Se volete iniziare a programmare in qualsiasi linguaggio, html.it &egrav...

Leggi la Descrizione
YoungPortal.it

Portale ricco di risorse per sviluppatori Delphi, asp.net, java. Da poco attiva la nuova sezione SUBSONIC che cerca di andare inco...

Leggi la Descrizione
CURSORI PL/SQL

Visitatori: 5224

La potenza del PL/SQL è in gran parte dovuta alla possibilità di utilizzare i cursori.
Un cursore gestisce l’accesso a un indirizzo di memoria in cui sono memorizzati i record risultanti dall’esecuzione di un comando SQL e consente di manipolare singolarmente ciascuna delle righe restituite da una SELECT.

I CURSORI possone essere ESPLICITI O IMPLICITI.

Cursori Espliciti

Rappresentano dei comandi sql predefiniti che restituiscono diversi record e vengono gestiti in modo esplicito dallo sviluppatore attraverso i comandi OPEN, FETCH, CLOSE..

Open

Carica i record estratti attraverso l'istruzione SQL specificata.

Fetch

Restituisce una riga prelevandola dall'insieme di righe selezionate e memorizzandola in un tipo record o in un insieme di variabili in base a quanto specificato nella clausola INTO.

Close

Chiude il cursore e rilascia la memoria che quest'ultimo stava utilizzando.

Cursori Impliciti

Vengono creati implicitamente dall'istruzione SQL e restituiscono una riga , altrimenti viene generata un'eccezione. (Quando assegniamo il valore di una variabile come risultato di una query SQL stiamo creando implicitamente un CURSORE).

Utilizzo di Cursori Espliciti

I cursori sono essenzialmente delle variabili, quindi anch'essi vanno dichiarati nella sezione DECLARE del nostro blocco PL/SQL.

Essenzialmente per utilizzare un cursore dobbiamo eseguire tre operazioni:

- Apertura attraverso il comando Open

- Lettura dei record attraverso il comando Fetch

- Chiusura del Cursore attraverso il comando Close

Esempio 1 - Dichiarazione e Apertura di un cursore Esplicito

DECLARE

          nome VARCHAR(30);

          cognome VARCHAR(30);

          num_esami INT;

          CURSOR studenti IS

             SELECT nome_studente, cognome_studente, esami_sostenuti

            FROM STUDENTI,

            WHERE anno_corso=1;

BEGIN

          OPEN studenti;


END;

Fino ad ora abbiamo visto come un cursore viene dichiarato e la sua apertura all'interno del blocco. L'apertura abbiamo detto che carica i record estratti dall'istruzione SQL. L'insieme di queste righe viene definito ACTIVE SET.

Per elaborare questi dati si utilizza il comando FETCH. IL comando ci consente di scorrere i record presenti nell'active set e assegnare ogni record o riga alle variabili o al tipo record definiti in precedenza nella sezione DECLARE.

Nel nostro esempio attraverso il comando FETCH caricheremo le righe nella variabili nome, cognome e num_esami.

Esempio 2 - Comando Fetch

DECLARE

         nome VARCHAR(30);

          cognome VARCHAR(30);

          num_esami INT;

          num_stud_promossi_2_anno INT;

          CURSOR studenti IS

             SELECT nome_studente, cognome_studente, esami_sostenuti

            FROM STUDENTI,

            WHERE anno_corso=1;

BEGIN

          num_stud_promossi_2_anno := 0;

          OPEN studenti;

          Loop

            FETCH studenti into nome, cognome, num_esami;

            IF num_esami >= 5 THEN

            num_stud_promossi_2_anno := num_stud_promossi_2_anno +1;

            END IF;

          End Loop

         CLOSE studenti;


END;

Nell'esempio abbiamo utilizzato un cursore esplicito per scorrere l'ACTIVE SET rappresentato dagli studenti del primo anno. Se lo studente ha superato un totale di esami almeno pari a 5 viene promosso al 2 anno. In questo caso tuttavia il blocco PL/SQL ricava il numero di studenti promossi ma non tiene alcuna traccia dei loro dati. LA maggior parte di voi avrà notato che potevamo ottenere lo stesso risultato semplicemente con l'istruzione:

SELECT count(*)

FROM STUDENTI

WHERE esami_sostenuti >=5;

Chiaramente ciò è vero ma non era questo lo scopo. L'esempio anche se relativamente semplice mostra tutte le fasi dell'utilizzo di un CURSORE, dalla sua dichiarazione, appertura, fetching dei dati, chiusura del Cursore.

Più avanti vedremo come creare procedure più complesse attraverso i CURSORI PL/SQL.

Lezione precedente | Indice degli articoli | Lezione successiva