PL/SQL - Cursori: Il Tuo Portale per la Manipolazione dei Dati

Ciao a tutti, futuri maghi dei database! Oggi ci imbarchiamo in un viaggio emozionante nel mondo dei cursori PL/SQL. Non preoccupatevi se siete nuovi al programming - sarò il vostro guida amichevole, e esploreremo questo argomento passo per passo. Alla fine di questo tutorial, userete i cursori come un professionista!

PL/SQL - Cursors

Cos'è un Cursor?

Prima di immergerci, capiremo cos'è un cursore. Immagina di essere a un buffet (so, sto già facendovi venire fame!). Hai un piatto (il tuo programma) e stai guardando tutte le deliziose pietanze (le tue tabelle del database). Un cursore è come la tua mano - ti aiuta a挑选特定的食物并将它们放在 il tuo piatto. In termini di database, un cursore ti permette di recuperare e manipolare dati dal tuo database, una riga alla volta.

Ora, esploriamo i due tipi di cursori in PL/SQL:

Cursori Impliciti

I cursori impliciti sono come le funzioni automatiche sulla tua fotocamera dello smartphone - lavorano dietro le quinte senza che tu debba fare molto. Oracle crea e gestisce questi cursori per te quando esegui istruzioni SQL.

Guardiamo un esempio:

BEGIN
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 20;

IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employees received a 10% raise!');
ELSE
DBMS_OUTPUT.PUT_LINE('No employees in department 20 found.');
END IF;
END;
/

In questo codice:

  1. Stiamo aggiornando lo stipendio dei dipendenti del dipartimento 20.
  2. SQL%FOUND è un attributo del cursore implicito che restituisce TRUE se l'UPDATE ha interessato qualsiasi riga.
  3. Utilizziamo questo per stampare un messaggio appropriato.

Altri attributi utili dei cursori impliciti includono:

  • SQL%ROWCOUNT: Numero di righe interessate
  • SQL%ISOPEN: Restituisce sempre FALSE per i cursori impliciti
  • SQL%NOTFOUND: Opposto di SQL%FOUND

Cursori Espliciti

I cursori espliciti sono come la modalità manuale sulla tua fotocamera - hai più controllo, ma devi gestirli tu stesso. Sono perfetti quando devi processare le righe una alla volta o quando vuoi avere più controllo sul processo di recupero dei dati.

Dismettiamo il ciclo di vita di un cursore esplicito:

Dichiarazione del Cursor

Prima, dobbiamo dire al nostro blocco PL/SQL quali dati vogliamo lavorare. È come decidere cosa vuoi mangiare al buffet prima di iniziare a riempire il tuo piatto.

DECLARE
CURSOR c_emp IS
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 30;

Qui, abbiamo dichiarato un cursore chiamato c_emp che recupererà i dettagli dei dipendenti dal dipartimento 30.

Apertura del Cursor

Ora che abbiamo deciso cosa vogliamo, è giunto il momento di avvicinarci al buffet (o nel nostro caso, il database).

OPEN c_emp;

Questa riga dice a Oracle di eseguire l'istruzione SELECT e preparare il set di risultati.

Recupero del Cursor

Questo è dove iniziamo a mettere il cibo nel nostro piatto - o in termini di programmazione, recuperare i dati riga per riga.

DECLARE
v_emp_id employees.employee_id%TYPE;
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_emp_id, v_first_name, v_last_name;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_emp_id || ' - ' || v_first_name || ' ' || v_last_name);
END LOOP;
CLOSE c_emp;
END;
/

In questo esempio:

  1. Dichiariamo le variabili per mantenere i nostri dati recuperati.
  2. Apriamo il cursore.
  3. Utilizziamo un LOOP per recuperare le righe una alla volta.
  4. Esce dal ciclo quando non ci sono più righe (c_emp%NOTFOUND).
  5. Stampiamo i dettagli di ciascun dipendente.

Chiusura del Cursor

Come restituiamo il piatto dopo aver finito al buffet, dobbiamo chiudere il nostro cursore quando abbiamo finito.

CLOSE c_emp;

Questo rilascia le risorse associate al cursore.

Cicli FOR con Cursor: Una scorciatoia

Ora, ho un piccolo segreto per te. C'è un modo per rendere encore con i cursori anche più facile - si chiama Ciclo FOR con Cursor. È come avere un amico utile al buffet che riempie il tuo piatto per te!

BEGIN
FOR emp_rec IN (SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 30) LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.employee_id || ' - ' ||
emp_rec.first_name || ' ' ||
emp_rec.last_name);
END LOOP;
END;
/

Questo ciclo magico fa tutto il lavoro per te:

  1. Dichiarare una variabile di record (emp_rec) per mantenere ogni riga.
  2. Apre il cursore, recupera ogni riga e chiude il cursore automaticamente.
  3. Devi solo concentrarti su cosa fare con ogni riga all'interno del ciclo.

Metodi del Cursor: Il Tuo Kit Utili

Riassumiamo i metodi che possiamo utilizzare con i cursori in una tabella ordinata:

Metodo Descrizione
DECLARE Definisce il cursore e la sua istruzione SELECT
OPEN Esegue l'istruzione SELECT e prepara il set di risultati
FETCH Recupera la prossima riga dal set di risultati
CLOSE Chiude il cursore e rilascia le risorse

Ricorda, con grande potere viene grande responsabilità. Chiudi sempre i tuoi cursori quando hai finito per liberare le risorse!

E вот вы и здесь, miei cari studenti! Avete appena fatto i vostri primi passi nel mondo dei cursori PL/SQL. Praticate con questi concetti, giocate con diverse situazioni e presto navigherete attraverso i vostri database con la grazia e la precisione di un programmatore esperto.

Ricorda, nella programmazione, come nella vita, la chiave è continuare a imparare e sperimentare. Quindi vai avanti, scrivi del codice, fai degli errori e, cosa più importante, divertiti! Chi lo sa, la prossima grande applicazione di database potrebbe essere proprio tra le tue dita. Buon divertimento con il coding!

Credits: Image by storyset