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