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

  1. Declarar el cursor: Definir el cursor amb una sentència SQL.
  2. Obrir el cursor: Executar la sentència SQL associada al cursor.
  3. Recuperar les files: Processar les files una a una.
  4. 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.

© Copyright 2024. Tots els drets reservats