En este tema, aprenderemos sobre los cursores en PL/SQL, una herramienta fundamental para manejar conjuntos de resultados de consultas SQL. Los cursores pueden ser implícitos o explícitos, y cada tipo tiene sus propias características y usos.

¿Qué es un Cursor?

Un cursor es un mecanismo que permite a las aplicaciones PL/SQL procesar filas de una consulta SQL de manera individual. Los cursores son esenciales cuando se necesita trabajar con múltiples filas de datos, ya que permiten recorrer y manipular cada fila de manera controlada.

Cursores Implícitos

Los cursores implícitos son gestionados automáticamente por Oracle cuando se ejecuta una sentencia SQL que devuelve un conjunto de resultados. No requieren una declaración explícita por parte del programador.

Características de los Cursores Implícitos:

  • Son creados automáticamente por Oracle.
  • Se utilizan principalmente para sentencias INSERT, UPDATE, DELETE y SELECT INTO.
  • No requieren una declaración explícita ni un manejo explícito de apertura o cierre.

Ejemplo de Cursor Implícito:

DECLARE
    v_total_employees NUMBER;
BEGIN
    -- El cursor implícito se crea y gestiona automáticamente
    SELECT COUNT(*) INTO v_total_employees FROM employees;
    DBMS_OUTPUT.PUT_LINE('Total Employees: ' || v_total_employees);
END;
/

En este ejemplo, el cursor implícito se utiliza para contar el número de empleados en la tabla employees.

Cursores Explícitos

Los cursores explícitos son definidos y gestionados por el programador. Se utilizan cuando se necesita un control más fino sobre el procesamiento de filas de una consulta.

Características de los Cursores Explícitos:

  • Deben ser declarados explícitamente en el bloque PL/SQL.
  • Requieren operaciones explícitas de apertura (OPEN), recuperación (FETCH) y cierre (CLOSE).
  • Permiten un control detallado sobre el procesamiento de cada fila.

Ejemplo de Cursor Explícito:

DECLARE
    CURSOR emp_cursor IS
        SELECT employee_id, first_name, last_name FROM employees;
    v_employee_id employees.employee_id%TYPE;
    v_first_name employees.first_name%TYPE;
    v_last_name employees.last_name%TYPE;
BEGIN
    OPEN emp_cursor;
    LOOP
        FETCH emp_cursor INTO v_employee_id, v_first_name, v_last_name;
        EXIT WHEN emp_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id || ', Name: ' || v_first_name || ' ' || v_last_name);
    END LOOP;
    CLOSE emp_cursor;
END;
/

En este ejemplo, se declara un cursor explícito emp_cursor que selecciona employee_id, first_name y last_name de la tabla employees. Luego, se abre el cursor, se recuperan las filas una por una y se cierran al final.

Comparación entre Cursores Implícitos y Explícitos

Característica Cursores Implícitos Cursores Explícitos
Declaración Automática Explícita
Gestión Automática Manual (OPEN, FETCH, CLOSE)
Uso Principal Sentencias INSERT, UPDATE, DELETE, SELECT INTO Consultas que requieren procesamiento fila por fila
Control sobre Filas Limitado Completo
Complejidad Baja Alta

Ejercicio Práctico

Ejercicio 1: Uso de Cursor Implícito

Escribe un bloque PL/SQL que utilice un cursor implícito para calcular el salario promedio de los empleados en la tabla employees.

Solución:

DECLARE
    v_avg_salary NUMBER;
BEGIN
    SELECT AVG(salary) INTO v_avg_salary FROM employees;
    DBMS_OUTPUT.PUT_LINE('Average Salary: ' || v_avg_salary);
END;
/

Ejercicio 2: Uso de Cursor Explícito

Escribe un bloque PL/SQL que utilice un cursor explícito para listar los nombres y salarios de los empleados cuyo salario es mayor a 5000.

Solución:

DECLARE
    CURSOR high_salary_cursor IS
        SELECT first_name, last_name, salary FROM employees WHERE salary > 5000;
    v_first_name employees.first_name%TYPE;
    v_last_name employees.last_name%TYPE;
    v_salary employees.salary%TYPE;
BEGIN
    OPEN high_salary_cursor;
    LOOP
        FETCH high_salary_cursor INTO v_first_name, v_last_name, v_salary;
        EXIT WHEN high_salary_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Name: ' || v_first_name || ' ' || v_last_name || ', Salary: ' || v_salary);
    END LOOP;
    CLOSE high_salary_cursor;
END;
/

Conclusión

En esta sección, hemos aprendido sobre los cursores implícitos y explícitos en PL/SQL. Los cursores implícitos son gestionados automáticamente por Oracle y son útiles para operaciones simples, mientras que los cursores explícitos proporcionan un control detallado sobre el procesamiento de filas y son necesarios para operaciones más complejas. Con esta base, estarás preparado para manejar conjuntos de resultados de manera eficiente en tus aplicaciones PL/SQL.

© Copyright 2024. Todos los derechos reservados