UNIDAD IV

 

Comandos DDL DML DCL Clausulas Consulta Cursores TP Volver

CURSORES

Introducción a cursores PL/SQL

El área de contexto es la memoria designada para procesar una instrucción SQL, la cual incluye

  • el número de registros procesados,

  • un apuntador a la representación de la instrucción SQL analizada y,

  • en el caso de una consulta, el conjunto de registros que regresan de la consulta.

 

Un cursor es un manejador o apuntador para el área de contexto. Por medio de éste un programa PL/SQL puede controlar el área de contexto.


Los cursores implícitos son creados por Oracle para manejar alguna instrucción SQL y no son declarados por el programador.


Los cursores explícitos son aquellos qwe se declaran, generalmente por medio de una consulta SQL.

Pasos para procesar un cursor explícito

  1. Declaración del cursor

    • La consulta no debe contener la cláusula INTO.

    • Se puede hacer referencia a variables dentro de la cláusula WHERE.

    
      CURSOR nombre_cursor IS
     instrucción_SELECT 
    • También es posible declarar una lista de parámetros:

    CURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS
     instrucción_SELECT 
  1. Abrir el cursor

    • La sintaxis es:

OPEN nombre_cursor;
    • Se examinan los valores de las variables

    • Se determina el conjunto activo

    • El apuntador para el conjunto activo se establece en el primer registro

  1. Recuperar los resultados en variables PL/SQL

    • Tiene dos formas:

FETCH cursor_name INTO lista_variables;

o

FECTH cursor_name INTO registro_PL/SQL;
  1. Cerrar el cursor

    • La sintaxis es:

CLOSE nombre_cursor;
    • Cuando se cierra el cursor, es ilegal tratar de usarlo

    • Es ilegal tratar de cerrar un cursor que ya está cerrado o no ha sido abierto

Atributos de cursores explícitos

Toman los valores TRUE, FALSE o NULL dependiendo de la situación:


Atributo

Antes de abrir

Al abrir

Durante la recuperación

Al finalizar la recuperación

Después de cerrar

%NOTFOUND

ORA-1001

NULL

FALSE

TRUE

ORA-1001

%FOUND

ORA-1001

NULL

TRUE

FALSE

ORA-1001

%ISOPEN

FALSE

TRUE

TRUE

TRUE

FALSE

%ROWCOUNT

ORA-1001

0

*

**

ORA-1001

* Número de registros que ha recuperado hasta el momento
** Número de total de registros

Manejo del cursor por medio de ciclos

Por medio de ciclo LOOP. Debe tenerse cuidado de agregar una condición para salir del ciclo:

    OPEN nombre_cursor;
    LOOP
        FECTH nombre_cursor INTO lista_variables;
        EXIT WHEN nombre_cursor%notfound;
        /* Procesamiento de los registros recuperados */
    END LOOP;
    CLOSE nombre_cursor;
        

Por medio de un ciclo WHILE LOOP. La instrucción FECTH aparece dos veces.

    OPEN nombre_cursor;
    FECTH nombre_cursor INTO lista_variables;
    WHILE nombre_cursor%found LOOP
        /* Procesamiento de los registros recuperados */
        FECTH nombre_cursor INTO lista_variables;
    END LOOP;
    CLOSE nombre_cursor;
        

Por medio de un ciclo FOR LOOP. Es la forma más corta ya que el cursor es implicitamente se ejecutan las instrucciones OPEN, FECTH y CLOSE.

 

    FOR variable IN nombre_cursor LOOP
        /* Procesamiento de los registros recuperados */
    END LOOP;
 


		

Volver

 

*