Los
cursores son sentencias SQL select que
se utilizan dentro de bloques PL/SQL para realizar consulta a bases de datos.
Sentencia base:
Sentencia base:
Cursor nombre_cursor (variable tipo_dato) is --Se crea el cursor
Select *
--Sentencia select
From nombre_tabla;
El cursor
se debe crear en la declaración del
bloque sea un procedimiento, función o bloque anónimo, un bloque puede contener uno o más cursores, para
dar uso a un cursor este se puede hacer utilizando la sentencia OPEN, FETCH, INTO y CLOSE.
OPEN: Indica que se abre el cursor.
FECTH: Prepara el cursor para obtener los valores
por registro.
INTO: Variable en la cual se va a almacenar el
valor recuperado por el fetch.
CLOSE: Cierra el cursor.
Ejemplo: Se requiere conocer el nombre de todos los
empleados que ingresaron este año a la empresa.
Declare
--Se declara el cursor
Cursor cur_nombres
is
Select nombre
From empleados
Where to_char(fecha,’YYYY’) = to_char(sysdate,’YYYY’);
Nombre varchar2(200);
Begin
OPEN cur_nombres;
--abre el cursor
Loop --Ciclo que recorre el cursor
FECTH cur_nombres INTO
Nombre; --Pasa registro a registro el nombre
encontrado
Exit when cur_nombres%notfound; --Indica que si
no tiene datos el cursor salga del ciclo
Dbms_output.put_line(Nombre); --Imprime el resultado
End loop; --Fin del ciclo
CLOSE cur_nombres;
--Cierra el cursor
End;
Un cursor
no puede realizar la función FETCH
si no se ha realizado la función OPEN,
y tampoco puede intentar volver a abrirse (OPEN)
si aún no se ha realizado la sentencia CLOSE,
en ambos casos el cursor genera un error.
Otra forma
de recorrer un cursor es utilizando la sentencia FOR LOOP.
Declare
Cursor cur_nombres
is
Select nombre
From empleados
Where to_char(fecha,’YYYY’) = to_char(sysdate,’YYYY’);
Nombre varchar2(200);
Begin
FOR nombre IN cur_nombres LOOP
Dbms_output.put_line(Nombre);
END LOOP;
End;
:o gracias por éste gran aporte... soy nueva en plsql, hoy gracias a su blog he comprendido cómo funcionan los cursores.
ResponderEliminar