Вы находитесь на странице: 1из 24

Base de Datos II

Sesin 7
Construccin de cursores
explcitos
Profesor: Ing. Juan Deza Ari

Objetivos de la Sesin
Definir

que es un cursor y para


que sirve
Decidir cuando es conveniente
el uso de cursores
Aplicar cursores para la
manipulacin masiva de datos

Temas a tratar
Definicin

de un cursor
Tipos de cursores. Definicin
de un cursor explcito

Definicin de un
cursor

Definicin de un cursor

Un cursor permite procesar grupos de


datos que se obtienen como resultado
de una consulta SQL que retorna una o
ms filas.
El cursor se almacena en un rea de
memoria.
Permiten realizar operaciones con varios
registros.

Definicin de un cursor

Un cursor es un puntero al rea de


memoria que ORACLE utiliza para
procesar una sentencia SELECT. Esta
rea de memoria recibe el nombre de
rea de contexto

Tipos de cursores

Tipos de cursores
Cursores implcitos

Los cursores implcitos son creados por


Oracle para manejar alguna instruccin
SQL y no son declarados por el
programador.

Tipos de cursores
Cursores explcitos

Los cursores explcitos son aquellos que


se declaran generalmente por medio de
una consulta SQL
Se utilizan generalmente para procesar
consultas que devuelvan ms de una
fila

Proceso de un cursor explcito


Declaracin

del cursor (DECLARE)


Abrir el cursor (OPEN)
Procesar las filas (FETCH)
Cerrar el cursor (CLOSE)

Declaracin del Cursor

Se da un nombre al cursor y se asocia a


una consulta especfica.
Un cursor puede recibir parmetros que
son usados en la consulta asociada.

Sintaxis
CURSOR nombre_cursor [ (par1 [,
par2]) ] IS instruccin_SELECT

Abrir el cursor

Al abrir un cursor se ejecuta


inmediatamente la consulta e identifica
el conjunto resultado, el que consiste de
todas las filas que concuerdan con el
criterio de seleccin de ste.

Sintaxis
Open nombre_cursor [ (var1 [, var2])
]

Procesar las filas

Devuelve una fila del conjunto de


resultados.
Despues de cada recuperacin el cursor
avanza al siguiente registro

Sintaxis
Fetch cursor_name into lista_variables
or
Fetch cursor_name into registro_PL/SQL

Cerrar el cursor

Cierra el cursor y libera el conjunto de


resultados.
Una vez que un cursor ya ha sido
cerrado, es posible volverlo a abrir sin
tener que declararlo otra vez.

Sintaxis
CLOSE nombre_cursor

Atributos de cursores

%FOUND: es un atributo booleano, de forma que


si la ltima orden FETCH devuelve una fila nos
devuelve el valor TRUE, si no nos devuelve
FALSE.
%NOTFOUND: se comporta de forma opuesta a
%FOUND.
%ISOPEN: es tambin un atributo booleano que
se utiliza para asociar si el cursor asociado est
abierto o no.
%ROWCOUNT: este atributo numrico devuelve
el nmero de filas extradas por el cursor hasta
ese momento.

Proceso de cursores

Cursores implcitos
Las rdenes DECLARE, OPEN, FETCH y
CLOSE no son relevantes para este tipo
de cursores, aunque si que permiten
que se les asigne los atributos de cursor
mencionados.

Proceso de cursores

Cursores explcitos
Por medio de ciclo LOOP.
Debe tenerse cuidado de agregar una
condicin para salir del ciclo:
OPEN nombre_cursor;
LOOP
FETCH nombre_cursor INTO lista_variables;
EXIT WHEN nombre_cursor%notfound;
/* Procesamiento de los registros recuperados */
END LOOP;
CLOSE nombre_cursor;

Proceso de cursores

Cursores explcitos
Por medio de un ciclo WHILE LOOP.
La instruccin FECTH aparece dos veces:
OPEN nombre_cursor;
FETCH nombre_cursor INTO lista_variables;
WHILE nombre_cursor%found LOOP
/* Procesamiento de los registros recuperados */
FETCH nombre_cursor INTO lista_variables;
END LOOP;
CLOSE nombre_cursor;

Proceso de cursores

Cursores explcitos
Por medio de un ciclo FOR LOOP.
Es la forma ms corta ya que implcitamente
se ejecutan las instrucciones OPEN, FECTH y
CLOSE.
FOR variable IN nombre_cursor LOOP
/* Procesamiento de los registros recuperados */
END LOOP;

Clasulas

FOR UPDATE
Es usado para bloquear registros de un cursor
que van a ser actualizados o eliminados.
SELECT ... FROM ... FOR UPDATE [OF
columna_referencia] [NOWAIT]

Donde columna_referencia es una columna o


listas de columnas de la tabla sobre la que se
realiza la consulta y se desea bloquear.

Ejemplo FOR UDPATE


DECLARE
DECLARE
--- Este
Este cursor
cursor bloquea
bloquea las
las columnas
columnas dname,
dname, loc
loc
CURSOR
CURSOR c_AllDepartments
c_AllDepartments IS
IS
SELECT
SELECT ** FROM
FROM dept
dept
FOR
FOR UPDATE
UPDATE OF
OF dname,
dname, loc
loc
--- Este
Este cursor
cursor bloquea
bloquea todas
todas las
las columnas
columnas
CURSOR
CURSOR c_AllEmpleados
c_AllEmpleados IS
IS
SELECT
SELECT ** FROM
FROM emp
emp
FOR
FOR UPDATE
UPDATE OF
OF ename,
ename, job
job

Clasulas

WHERE CURRENT OF
Si se declara el cursor con la clasula FOR
UPDATE, se puede emplear la clasula WHERE
CURRENT OF en una orden UPDATE o DELETE
para hacer referencia a la fila recin extrada
por el cursor.
WHERE CURRENT OF cursor

Ejemplo WHERE CURRENT OF


DECLARE
DECLARE
CURSOR
CURSOR c_salario
c_salario IS
IS
SELECT
SELECT sal
sal FROM
FROM emp
emp where
where deptno
deptno == 30
30
FOR
FOR UPDATE
UPDATE NOWAIT;
NOWAIT;
BEGIN
BEGIN
FOR
FOR emp_record
emp_record IN
IN c_salario
c_salario LOOP
LOOP
UPDATE
UPDATE emp
emp
SET
SET sal
sal == emp_record.sal
emp_record.sal ** 1.10
1.10
WHERE
WHERE CURRENT
CURRENT OF
OF c_salario;
c_salario;
END
END LOOP;
LOOP;
COMMIT;
COMMIT;
END;
END;

Final
Alguna

duda?

pregunta o alguna

Gracias.

Вам также может понравиться