Cursor Oracle PL / SQL: Implícito, Explícito, Cursor FOR Loop (Ejemplo)

Tabla de contenido:

Anonim

¿Qué es CURSOR en PL / SQL?

Un cursor es un puntero a esta área de contexto. Oracle crea un área 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. Un cursor contiene las filas devueltas por la instrucción SQL. El conjunto de filas que contiene el cursor se denomina conjunto activo. Estos cursores también se pueden nombrar para que puedan ser referidos desde otro lugar del código.

En este tutorial aprenderás

  • Cursor implícito
  • Cursor explícito
  • Atributos del cursor
  • Instrucción del cursor de bucle FOR

El cursor es de dos tipos.

  • 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 filas afectadas, en esa operación en particular. Estos cursores no se pueden nombrar y, por lo tanto, no se pueden controlar o hacer referencia desde otro lugar del código. Solo podemos referirnos al cursor más reciente a través de los atributos del cursor.

Cursor explícito

Los programadores pueden crear un área de contexto con nombre para ejecutar sus operaciones DML para tener más control sobre ella. El cursor explícito debe definirse en la sección 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.

  • Declarando el cursor

    Declarar el cursor simplemente significa crear un área de contexto con nombre para la declaración 'SELECT' que se define en la parte de declaración. El nombre de esta área de contexto es el mismo que el del cursor.

  • Cursor de apertura

    Abrir el cursor le indicará al PL / SQL que asigne la memoria para este cursor. Hará que el cursor esté listo para buscar los registros.

  • Obteniendo datos del cursor

    En este proceso, se ejecuta la instrucción 'SELECT' y las filas obtenidas se almacenan en la memoria asignada. Estos ahora se denominan conjuntos activos. La obtención de datos del cursor es una actividad a nivel de registro que significa que podemos acceder a los datos registro por registro.

    Cada declaración de recuperación buscará un conjunto activo y contiene la información de ese registro en particular. Esta declaración es la misma que la declaración 'SELECT' que busca el registro y asigna a la variable en la cláusula 'INTO', pero no arrojará ninguna excepción.

  • Cerrar el cursor

    Una vez que se haya obtenido todo el registro ahora, debemos cerrar el cursor para que se libere la memoria asignada a esta área de contexto.

Sintaxis:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • En la sintaxis anterior, la parte de declaración contiene la declaración del cursor.
  • El cursor se crea para la instrucción 'SELECT' que se proporciona en la declaración del cursor.
  • En la parte de ejecución, el cursor declarado se configura en el bucle FOR y la variable de bucle 'I' se comportará como variable de cursor en este caso.

Ejemplo 1 : En este ejemplo, proyectaremos todo el nombre de empleado de la tabla emp usando un ciclo de cursor-FOR.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Producción

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Explicación del código:

  • Línea de código 2 : Declarando el cursor guru99_det para la instrucción 'SELECT emp_name FROM emp'.
  • Línea de código 4 : Construcción del bucle 'FOR' para el cursor con la variable de bucle lv_emp_name.
  • Línea de código 5: Imprimir el nombre del empleado en cada iteración del ciclo.
  • Línea de código 8: Salir del bucle

Nota: En el bucle Cursor-FOR, los atributos del cursor no se pueden usar ya que la apertura, extracción y cierre del cursor se realiza implícitamente mediante el bucle FOR.