Saltar al contenido

Cursor implícito, explícito, tu bucle [Example]

¿Qué es CURSOR en PL / SQL?

El cursor es un puntero en este campo de contexto. Oracle crea un campo de contexto para procesar una declaración SQL que contiene toda la información sobre la declaración.

PL / SQL permite al programador controlar el área de contexto a través del cursor. El cursor mantiene las filas devueltas en la instrucción SQL. La matriz de cursores se denomina conjunto activo. Estos cursores también se pueden nombrar para que se puedan transmitir desde otro lugar del código.

En este tutorial aprenderás

Hay dos tipos de cursor.

  • Cursor implícito
  • Cursor explícito

Cursor implícito

Siempre que ocurra alguna operación DML en la base de datos, se crea un cursor implícito que contiene las capas relevantes, en esa operación en particular. Estos cursores no se pueden nombrar y por lo tanto no se pueden controlar o transmitir desde otra parte del código. Solo podemos referirnos al último cursor a través de los atributos del cursor.

Cursor explícito

Los programadores pueden crear un área de contexto designada para realizar sus operaciones DML para un mayor control. El cursor explícito debe definirse en la parte de declaración del bloque PL / SQL, y se crea para la declaración ‘SELECT’ que debe usarse en el código.

A continuación se muestran los pasos necesarios para trabajar con cursores explícitos.

Sintaxis:

DECLARE
CURSOR <cursor_name> IS <SELECT statement^>
<cursor_variable declaration>
BEGIN
OPEN <cursor_name>;
FETCH <cursor_name> INTO <cursor_variable>;
.
.
CLOSE <cursor_name>;
END;

Atributos del cursor

Un cursor implícito y el cursor explícito tienen ciertos atributos a los que se puede acceder. Estos atributos proporcionan más información sobre las operaciones del cursor. A continuación se muestran los distintos atributos del cursor y su uso.

Atributo de cursorSuelte
% ENCONTRÓDevuelve el resultado booleano ‘VERDADERO’ si la última operación de hervido obtuvo un registro con éxito, o devuelve FALSO.
% DARSE CUENTAEsto funciona en contraste con% FOUND, devolverá ‘TRUE’ si la última operación de recuperación no pudo obtener ningún registro.
% ESTA ABIERTODevuelve el resultado booleano ‘VERDADERO’ si el cursor dado ya está abierto, o devuelve ‘FALSO’
% NÚMERO DE FILASDevuelve el valor numérico. Proporciona el recuento real de registros afectados por la actividad de DML.

Ejemplo 1: En este ejemplo, veremos cómo declarar, abrir, recuperar y cerrar el cursor explícito.

Proyectaremos el nombre de todo el empleado de la tabla emp usando un cursor. También usaremos un atributo de cursor para configurar el bucle para obtener todo el registro del cursor.

DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp;
lv_emp_name emp.emp_name%type;

BEGIN
OPEN guru99_det;

LOOP
FETCH guru99_det INTO lv_emp_name;
IF guru99_det%NOTFOUND
THEN
EXIT;
END IF;
Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);
END LOOP;
Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);
CLOSE guru99_det;
END:
/

Producción

Employee Fetched:BBB
Employee Fetched:XXX
Employee Fetched:YYY 
Total rows fetched is 3

Explicación del Código:

PARA la instrucción Loop Cursor

La instrucción «FOR LOOP» se puede utilizar para trabajar con cursores. Podemos sustituir el nombre del cursor por un límite de rango en la instrucción del ciclo FOR para que el ciclo funcione desde el primer registro del cursor hasta el último registro del cursor. El bucle FOR implícitamente el cursor, abrirá el cursor, cerrará el cursor y cerrará el cursor.

Sintaxis:

DECLARE
CURSOR <cursor_name> IS <SELECT statement>;
BEGIN
  FOR I IN <cursor_name>
  LOOP
  .
  .
  END LOOP;
END;

Ejemplo 1: En este ejemplo, usaremos el nombre de todos los empleados de la tabla emp usando el bucle cursor-FOR.

DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp; 
BEGIN
FOR lv_emp_name IN guru99_det
LOOP
Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);
END LOOP;
END;
/

Producción


Employee Fetched:BBB 
Employee Fetched:XXX
Employee Fetched:YYY

Explicación del Código:

Nota: En el ciclo Cursor-FOR, los atributos del cursor no se pueden usar ya que el ciclo FOR abre, recupera y cierra implícitamente los cursores.