En aquest tema, explorarem els conceptes de cursors implícits i explícits en PL/SQL. Els cursors són mecanismes que permeten als programes PL/SQL processar una fila a la vegada d'un conjunt de resultats. Hi ha dos tipus principals de cursors: implícits i explícits.
Cursors Implícits
Els cursors implícits són creats automàticament per Oracle cada vegada que s'executa una sentència SQL (com SELECT, INSERT, UPDATE o DELETE). No cal que el programador els declari explícitament.
Característiques dels Cursors Implícits
- Són gestionats automàticament per Oracle.
- No requereixen una declaració explícita.
- Són útils per a operacions simples de consulta i manipulació de dades.
Exemple de Cursor Implícit
BEGIN
-- Cursor implícit per a una operació d'inserció
INSERT INTO empleats (id, nom, salari)
VALUES (1, 'Joan', 3000);
-- Cursor implícit per a una operació de selecció
SELECT nom INTO v_nom
FROM empleats
WHERE id = 1;
END;En aquest exemple, Oracle crea i gestiona automàticament els cursors per a les operacions INSERT i SELECT.
Cursors Explícits
Els cursors explícits són declarats i gestionats pel programador. Són útils quan es necessita un control més gran sobre el processament de les files retornades per una consulta.
Característiques dels Cursors Explícits
- Han de ser declarats explícitament.
- Permeten un control més gran sobre el processament de les files.
- Són útils per a operacions complexes de consulta.
Passos per Utilitzar un Cursor Explícit
- Declarar el cursor: Definir el cursor amb una sentència SQL.
- Obrir el cursor: Executar la sentència SQL associada al cursor.
- Recuperar les files: Processar les files una a una.
- Tancar el cursor: Alliberar els recursos associats al cursor.
Exemple de Cursor Explícit
DECLARE
CURSOR c_emplats IS
SELECT id, nom, salari
FROM empleats;
v_id empleats.id%TYPE;
v_nom empleats.nom%TYPE;
v_salari empleats.salari%TYPE;
BEGIN
-- Obrir el cursor
OPEN c_emplats;
-- Recuperar les files una a una
LOOP
FETCH c_emplats INTO v_id, v_nom, v_salari;
EXIT WHEN c_emplats%NOTFOUND;
-- Processar les dades recuperades
DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ', Nom: ' || v_nom || ', Salari: ' || v_salari);
END LOOP;
-- Tancar el cursor
CLOSE c_emplats;
END;En aquest exemple, es declara un cursor c_emplats per seleccionar dades de la taula empleats. Després, s'obre el cursor, es recuperen les files una a una i es processen, i finalment es tanca el cursor.
Comparació entre Cursors Implícits i Explícits
| Característica | Cursors Implícits | Cursors Explícits |
|---|---|---|
| Declaració | Automàtica | Explícita |
| Control | Limitat | Gran control |
| Ús | Operacions simples | Operacions complexes |
| Gestió | Automàtica per Oracle | Gestionat pel programador |
| Recursos | Gestionats automàticament | Requereix tancar el cursor manualment |
Exercici Pràctic
Exercici 1: Utilitzar un Cursor Implícit
Escriu un bloc PL/SQL que insereixi un nou empleat a la taula empleats i després recuperi el nom de l'empleat inserit utilitzant un cursor implícit.
Solució
BEGIN
-- Inserir un nou empleat
INSERT INTO empleats (id, nom, salari)
VALUES (2, 'Anna', 3500);
-- Recuperar el nom de l'empleat inserit
DECLARE
v_nom empleats.nom%TYPE;
BEGIN
SELECT nom INTO v_nom
FROM empleats
WHERE id = 2;
DBMS_OUTPUT.PUT_LINE('Nom de l\'empleat: ' || v_nom);
END;
END;Exercici 2: Utilitzar un Cursor Explícit
Escriu un bloc PL/SQL que declari un cursor explícit per seleccionar tots els empleats amb un salari superior a 3000, i després imprimeixi els detalls de cada empleat.
Solució
DECLARE
CURSOR c_emplats IS
SELECT id, nom, salari
FROM empleats
WHERE salari > 3000;
v_id empleats.id%TYPE;
v_nom empleats.nom%TYPE;
v_salari empleats.salari%TYPE;
BEGIN
-- Obrir el cursor
OPEN c_emplats;
-- Recuperar les files una a una
LOOP
FETCH c_emplats INTO v_id, v_nom, v_salari;
EXIT WHEN c_emplats%NOTFOUND;
-- Processar les dades recuperades
DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ', Nom: ' || v_nom || ', Salari: ' || v_salari);
END LOOP;
-- Tancar el cursor
CLOSE c_emplats;
END;Conclusió
En aquesta secció, hem après sobre els cursors implícits i explícits en PL/SQL. Els cursors implícits són gestionats automàticament per Oracle i són útils per a operacions simples, mentre que els cursors explícits ofereixen un control més gran i són adequats per a operacions més complexes. Hem vist exemples pràctics de com utilitzar cadascun d'aquests tipus de cursors i hem practicat amb exercicis per reforçar els conceptes apresos.
Curs de PL/SQL
Mòdul 1: Introducció a PL/SQL
Mòdul 2: Fonaments de PL/SQL
- Estructura del bloc PL/SQL
- Variables i tipus de dades
- Estructures de control
- Cursors
- Gestió d'excepcions
