En este artículo, discutiremos cómo trabajar con cursores en Oracle. Los cursores son una herramienta esencial para la manipulación de datos en bases de datos Oracle, y este artículo le proporcionará una guía detallada para aprovechar al máximo esta herramienta y optimizar su uso.
Los cursores utilizan ciclos de sql para poder iterar entre registros, ademas debesmos conocer que para estos no ser requiere el uso del WHILE.
Introducción a los Cursores
Los cursores en Oracle son objetos de base de datos utilizados para manipular y recuperar datos en un conjunto de resultados. Son esenciales cuando se trabaja con PL/SQL, ya que permiten procesar cada fila de un conjunto de resultados de manera secuencial.
Ver imagen explica:

Tipos de Cursores en Oracle
Oracle ofrece dos tipos de cursores: implícitos y explícitos. Estos se diferencian en cómo se gestionan y en las características que ofrecen.
Cursores Implícitos
Los cursores implícitos son gestionados automáticamente por Oracle y se utilizan en la ejecución de sentencias SQL individuales. Cada vez que se ejecuta una sentencia SQL, Oracle crea un cursor implícito para gestionar la consulta y su conjunto de resultados. Estos cursores son temporales y se cierran automáticamente después de la ejecución de la sentencia SQL.
Beneficios de los cursores implícitos
Los cursores implícitos ofrecen varias ventajas:
- Gestión Automática: No es necesario declarar ni controlar los cursores implícitos, ya que Oracle se encarga de ello automáticamente.
- Sencillez: Como Oracle maneja los cursores implícitos en el fondo, el código PL/SQL se mantiene más limpio y fácil de entender.
- Eficiencia: Oracle gestiona los cursores implícitos con una gran eficiencia, minimizando así el uso de recursos del sistema.
- Menos errores: Al ser manejados automáticamente por Oracle, los cursores implícitos eliminan la posibilidad de errores comunes en la gestión manual de cursores, como olvidar cerrar un cursor.
Estos simplifican la programación en PL/SQL al manejar automáticamente la ejecución y recuperación de las instrucciones SQL, permitiendo al desarrollador centrarse en la lógica de la aplicación.
¿Cómo funcionan los cursores implícitos?
Los cursores implícitos en Oracle son aquellos que el sistema gestiona automáticamente cada vez que se ejecuta una sentencia SQL. No requieren una declaración explícita por parte del programador.
Cuando se ejecuta una instrucción SQL en PL/SQL, Oracle abre un cursor implícito para procesar la instrucción SQL y recuperar los datos. Oracle maneja todos los detalles de la gestión del cursor implícito en el fondo.
Aquí se muestra un ejemplo de un cursor implícito en acción:
BEGIN
UPDATE employees SET salary = salary * 1.1
WHERE department_id = 10;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;En este bloque de código, Oracle está utilizando un cursor implícito para ejecutar la instrucción UPDATE.
Cursores Explícitos
Los cursores explícitos son objetos de base de datos definidos y gestionados por el desarrollador. Permiten un mayor control sobre el procesamiento de datos y la manipulación de conjuntos de resultados. Los cursores explícitos se utilizan principalmente en bloques PL/SQL para realizar operaciones más avanzadas, como la iteración a través de múltiples filas de datos.
Declaración de un Cursor Explícito
Declarar un cursor explícito es tan simple como definir una consulta SQL y asignarla a un identificador. Se hace en la sección DECLARE del bloque PL/SQL.
Abrir un Cursor Explícito
Abrir un cursor significa ejecutar la consulta SQL asignada y almacenar el resultado en el área de memoria privada del servidor.
Recuperar los datos de un Cursor Explícito
Para recuperar los datos de un cursor, usamos la instrucción FETCH. Esta instrucción recupera la próxima fila de datos del cursor y la almacena en una variable o registro.
Cerrar un Cursor Explícito
Cerrar un cursor significa liberar la memoria asociada a él. Es una buena práctica cerrar los cursores cuando ya no son necesarios.
Ejemplo practico
A continuación, se presenta un ejemplo básico de cómo se usa un cursor explícito en PL/SQL:
DECLARE
CURSOR c_empleados IS SELECT nombre, salario FROM empleados;
v_nombre empleados.nombre%TYPE;
v_salario empleados.salario%TYPE;
BEGIN
OPEN c_empleados;
LOOP
FETCH c_empleados INTO v_nombre, v_salario;
EXIT WHEN c_empleados%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Nombre: ' || v_nombre
|| ', Salario: ' || v_salario);
END LOOP;
CLOSE c_empleados;
END;Gestión de Cursores en PL/SQL
Para trabajar con cursores explícitos en PL/SQL, es necesario seguir una serie de pasos:
- Declarar el cursor: Definir el cursor y la consulta SQL que se utilizará para recuperar el conjunto de resultados.
DECLARE
CURSOR c_empleados IS
SELECT * FROM empleados;
- Abrir el cursor: Iniciar el cursor y ejecutar la consulta SQL.
BEGIN OPEN c_empleados;
- Recuperar datos: Utilizar un bucle para iterar a través del conjunto de resultados y recuperar los datos.
FOR empleado IN c_empleados LOOP
DBMS_OUTPUT.PUT_LINE('ID Empleado: ' || empleado.id
|| ', Nombre: ' || empleado.nombre);
END LOOP;
- Cerrar el cursor: Liberar los recursos asociados al cursor cerrándolo.
CLOSE c_empleados; END;
Buenas Prácticas
Para garantizar un rendimiento óptimo y evitar posibles problemas al trabajar con cursores en Oracle, es importante seguir algunas buenas prácticas:
- Cerrar los cursores después de su uso: Siempre es importante cerrar los cursores una vez que hayan cumplido su propósito. Esto libera recursos del sistema y evita posibles problemas de rendimiento.
BEGIN OPEN c_empleados; ... CLOSE c_empleados; END;
- Utilizar cursores FOR: Los cursores FOR simplifican la gestión de cursores, ya que manejan automáticamente la apertura, recuperación de datos y cierre del cursor. Esto reduce la posibilidad de errores y mejora la legibilidad del código.
BEGIN
FOR empleado IN (SELECT * FROM empleados) LOOP
DBMS_OUTPUT.PUT_LINE('ID Empleado: ' || empleado.id
|| ', Nombre: ' || empleado.nombre);
END LOOP;
END;
- Limitar la cantidad de datos recuperados: Cuando se trabaja con grandes conjuntos de datos, es importante limitar la cantidad de información que se procesa a través de un cursor. Para ello, puede utilizar cláusulas como WHERE, ROWNUM o FETCH FIRST para reducir el número de filas devueltas.
DECLARE
CURSOR c_empleados IS
SELECT * FROM empleados
WHERE salario > 5000
FETCH FIRST 100 ROWS ONLY;- Optimizar las consultas SQL: Al utilizar cursores, es fundamental asegurarse de que las consultas SQL sean eficientes. Esto incluye la utilización de índices, la minimización de las uniones y la optimización de las cláusulas de filtro.
Conclusion
En resumen, los cursores en Oracle son una herramienta poderosa y esencial para manipular y recuperar datos en bases de datos. Al seguir las buenas prácticas mencionadas y comprender los conceptos clave, como los cursores implícitos y explícitos, puede garantizar un rendimiento óptimo y un código fácil de mantener.