Introducción a los Cursores en PL/SQL
Un cursor en PL/SQL es un mecanismo que te permite recorrer filas de una consulta de forma controlada. A través de los cursores, puedes recuperar y manipular varias filas de una tabla una por una.
Tipos de Cursores
Existen dos tipos principales de cursores en PL/SQL:
- Cursores Implícitos: Son gestionados automáticamente por Oracle cuando se ejecutan sentencias SQL como
INSERT
,UPDATE
oSELECT INTO
. - Cursores Explícitos: Son definidos por el usuario cuando se requiere procesar varias filas de una consulta.
Ejemplo de un Cursor Explícito
A continuación, te muestro cómo declarar y usar un cursor explícito para recorrer los datos de una tabla:
DECLARE CURSOR c_empleados IS SELECT nombre, salario FROM empleados WHERE departamento = 'Ventas'; 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('Empleado: ' || v_nombre || ' - Salario: ' || v_salario); END LOOP; CLOSE c_empleados; END;
En este ejemplo, declaramos un cursor llamado c_empleados
que selecciona los nombres y salarios de los empleados en el departamento de Ventas. El cursor se abre, y luego utilizamos un bucle para procesar cada fila, mostrando el nombre y el salario de cada empleado.
Propiedades del Cursor
Los cursores tienen varias propiedades útiles para controlar su estado:
%FOUND
: DevuelveTRUE
si elFETCH
ha recuperado una fila con éxito.%NOTFOUND
: DevuelveTRUE
si no hay más filas que recuperar.%ROWCOUNT
: Devuelve el número de filas recuperadas hasta el momento.
Cursores Parámetros
Los cursores también pueden aceptar parámetros para hacerlos más flexibles. Aquí te dejo un ejemplo:
DECLARE CURSOR c_empleados(p_depto VARCHAR2) IS SELECT nombre, salario FROM empleados WHERE departamento = p_depto; v_nombre empleados.nombre%TYPE; v_salario empleados.salario%TYPE; BEGIN OPEN c_empleados('Ventas'); LOOP FETCH c_empleados INTO v_nombre, v_salario; EXIT WHEN c_empleados%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Empleado: ' || v_nombre || ' - Salario: ' || v_salario); END LOOP; CLOSE c_empleados; END;
En este caso, el cursor c_empleados
acepta un parámetro llamado p_depto
que permite filtrar los empleados según el departamento que se le pase como argumento.
Con los cursores, puedes manejar conjuntos de datos de forma flexible en PL/SQL. En la siguiente lección, exploraremos subprogramas en PL/SQL, como funciones y procedimientos.
No hay comentarios:
Publicar un comentario