PL / SQL – Cursors (Italiano)
In questo capitolo discuteremo i cursori in PL / SQL. Oracle crea un’area di memoria, nota come area di contesto, per l’elaborazione di un’istruzione SQL, che contiene tutte le informazioni necessarie per l’elaborazione dell’istruzione; ad esempio, il numero di righe elaborate, ecc.
Un cursore è un puntatore a quest’area di contesto. PL / SQL controlla l’area di contesto tramite un cursore. Un cursore contiene le righe (una o più) restituite da un’istruzione SQL. L’insieme di righe che il cursore contiene è indicato come l’insieme attivo.
Puoi nominare un cursore in modo che possa essere indicato in un programma per recuperare ed elaborare le righe restituite dall’istruzione SQL, una Al tempo. Esistono due tipi di cursori:
- Cursori impliciti
- Cursori espliciti
Cursori impliciti
Cursori impliciti vengono creati automaticamente da Oracle ogni volta che viene eseguita un’istruzione SQL, quando non è presente un cursore esplicito per l’istruzione. I programmatori non possono controllare i cursori impliciti e le informazioni in esso contenute.
Ogni volta che viene emessa un’istruzione DML (INSERT, UPDATE e DELETE), un cursore implicito viene associato a questa istruzione. Per le operazioni INSERT, il cursore trattiene i dati che devono essere inseriti. Per le operazioni UPDATE e DELETE, il cursore identifica le righe che sarebbero interessate.
In PL / SQL, puoi fare riferimento al cursore implicito più recente come cursore SQL, che ha sempre attributi come% FOUND ,% ISOPEN,% NOTFOUND e% ROWCOUNT. Il cursore SQL ha attributi aggiuntivi,% BULK_ROWCOUNT e% BULK_EXCEPTIONS, progettati per essere utilizzati con l’istruzione FORALL. La tabella seguente fornisce la descrizione degli attributi più utilizzati:
S.No | Attributo & Descrizione |
---|---|
1 |
% FOUND Restituisce TRUE se un’istruzione INSERT, UPDATE o DELETE ha interessato una o più righe o un’istruzione SELECT INTO ha restituito una o più righe. In caso contrario, restituisce FALSE. |
2 |
% NOTFOUND L’opposto logico di% FOUND. Restituisce TRUE se un’istruzione INSERT, UPDATE o DELETE non ha interessato alcuna riga o un’istruzione SELECT INTO non ha restituito alcuna riga. In caso contrario, restituisce FALSE. |
3 |
% ISOPEN Restituisce sempre FALSE per i cursori impliciti, perché Oracle chiude automaticamente il cursore SQL dopo aver eseguito l’istruzione SQL associata. |
4 |
% ROWCOUNT Restituisce il numero di righe interessate da un’istruzione INSERT, UPDATE o DELETE o restituite da un’istruzione SELECT INTO. |
Si accederà a qualsiasi attributo di cursore SQL come sql% nome_attributo come mostrato di seguito nell’esempio.
Esempio
Useremo la tabella CLIENTI che abbiamo creato e utilizzato nei capitoli precedenti.
Il seguente programma aggiornerà la tabella e aumenterà lo stipendio di ogni cliente di 500 e utilizzerà la% SQL Attributo ROWCOUNT per determinare il numero di righe interessate –
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato –
6 customers selected PL/SQL procedure successfully completed.
Se controlli i record nella tabella dei clienti, scoprirai che le righe sono state aggiornate –
Cursori espliciti
I cursori espliciti sono cursori definiti dal programmatore per ottenere un maggiore controllo su l’area contesto. Un cursore esplicito dovrebbe essere definito nella sezione dichiarazione del blocco PL / SQL. Viene creato su un’istruzione SELECT che restituisce più di una riga.
La sintassi per la creazione di un cursore esplicito è –
CURSOR cursor_name IS select_statement;
Funzionante con un cursore esplicito include i seguenti passaggi:
- Dichiarazione del cursore per inizializzare la memoria
- Apertura del cursore per allocare la memoria
- Recupero del cursore per recuperare i dati
- Chiudere il cursore per liberare la memoria allocata
Dichiarazione del cursore
La dichiarazione del cursore definisce il cursore con un nome e l’istruzione SELECT associata. Ad esempio:
CURSOR c_customers IS SELECT id, name, address FROM customers;
Apertura del cursore
L’apertura del cursore alloca la memoria per il cursore e lo rende pronto per il recupero delle righe restituite dall’istruzione SQL in esso. Ad esempio, apriremo il cursore sopra definito come segue:
OPEN c_customers;
Recupero del cursore
Il recupero del cursore implica l’accesso a una riga in un tempo. Ad esempio, recupereremo le righe dal cursore sopra aperto come segue:
FETCH c_customers INTO c_id, c_name, c_addr;
Chiudere il cursore
Chiudere il cursore significa rilasciare la memoria allocata.Ad esempio, chiuderemo il cursore sopra aperto come segue:
CLOSE c_customers;
Esempio
Di seguito è riportato un esempio completo per illustrare i concetti di cursori espliciti & minua;
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.