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
-
Declaración del cursor
CURSOR nombre_cursor IS
instrucción_SELECT
CURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS
instrucción_SELECT
-
Abrir el cursor
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
-
Recuperar los resultados en variables PL/SQL
FETCH cursor_name INTO lista_variables;
o
FECTH cursor_name INTO registro_PL/SQL;
-
Cerrar el cursor
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;
|