Cursores PL SQL

download Cursores PL SQL

of 21

Transcript of Cursores PL SQL

C URSORES PL/SQL

Csar Martnez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

I NTRODUCCIN

Son utilizados para gestionar los resultados de una sentencia SELECT En el fondo, un cursor permite gestionar un conjunto de registros, recorriendo dicho conjunto y con acceso a sus datos Se estudiarn dos tipos de cursores

Cursor Implcito: No es necesario declararlo. La operacin SELECT INTO es un ejemplo Cursor Explcito: Se necesita declararlo en el cdigo

C URSOR I MPLCITO

Un cursor implcito es aquel que devuelve una nica fila como dato. La sentencia SELECT INTO es un ejemplo de cursor implcito El cursor implcito debe retornar siempre una fila o registro. Si esa condicin no se cumple, se producir un error (excepcin) Las excepciones que se pueden producir son:

NO DATA FOUND: No se encontr fila o registro que satisfaga el SELECT utilizado TOO MANY ROWS: El SELECT devuelve ms de una fila o registro

E JEMPLO DE C URSOR I MPLCITO

E JEMPLO DE ERROR C URSOR I MPLCITO

El cursor devuelve ms de una fila (TOO MANY ROWS)

C URSOR E XPLCITO

Un cursor explcito puede devolver cero o ms filas. Generalmente, un cursor explcito pasa por las siguientes etapas:

Declaracin (CURSOR) Apertura (OPEN)

Extraccin (FETCH)Cierre (CLOSE)

FASESPosicin Indef.

Posicin 1 Posicin 2

Posicin n

Datos Cursor Registro 1 Registro 2 Registro 3 . Registro n

Open Fetch

Close

S INTAXIS

Para declarar un cursor:

Simple:

CURSOR IS

Con parmetros:

CURSOR (param1 tipo1, param2 tipo2, , param n tipo n) IS

S INTAXIS

Para abrir un cursor:

Simple:

OPEN nombre_cursor;

Con parmetros:

OPEN nombre_cursor (valor1, valor2, ., valor n);

S INTAXIS

Para extraer datos de un cursor:

Con variables:

FETCH nombre_cursor INTO lista_variables;

Con registro PL/SQL:

FETCH nombre_cursor INTO registro_PL/SQL;

S INTAXIS

Para cerrar un cursor:

CLOSE nombre_cursor;

ATRIBUTOS C URSORES

Con los atributos de los cursores se permite reconocer el estado de un cursor %NOTFOUND: Devuelve verdadero cuando el cursor no retorna un registro %FOUND: Devuelve verdadero cuando el cursor retorna un registro %ISOPEN: Devuelve verdadero mientras el cursor est abierto %ROWCOUNT: Devuelve la cantidad de registros que se ha recuperado hasta el momento

E JEMPLO C URSOR E XPLCITO

Declaracin

Apertura Extraccin

Cierre

C ONSIDERACIONES

Cuando un cursor est cerrado, no puede retornar registros y en general, los atributos tampoco pueden ser utilizados (excepto %ISOPEN) No se puede cerrar un cursor que ya est cerrado Es conveniente consultar el resultado de una extraccin mediante los atributos del cursor (%NOTFOUND, %FOUND)

Al terminar de usar un cursor, es recomendable cerrarlo para liberar espacio de memoria y dejarlo disponible para el SGBD

O TRAS F ORMAS DE C URSORES E XPLCITOS

Se puede utilizar una estructura de ciclo FOR, para recorrer el resultado de un cursor De la forma anterior, se ejecutan implcitamente las instrucciones OPEN, FETCH y CLOSE Uno de los puntos en contra respecto a esta modalidad, es que el cursor no tiene nombre, y por lo tanto, su resultado no puede ser capturado por una aplicacin externa a Oracle para el uso de sus datos (ej. .NET, Java)

E JEMPLOS O TRAS F ORMAS DE C URSORES E XPLCITOS

E JEMPLOS O TRAS F ORMAS DE C URSORES E XPLCITOS

C URSORES DE A CTUALIZACIN

Los cursores de actualizacin se utilizan para actualizar los valores de los datos que son utilizados por el propio cursor

Se debe considerar que los registros actualizados son bloqueados mientras dura la actualizacinEn la declaracin del cursor se agrega FOR UPDATE En la sentencia Update se agrega en la condicin CURRENT OF nombre_cursor

E JEMPLOS C URSOR A CTUALIZACIN

AYDANOS

A

M EJORAR

[email protected] [email protected]

FIN

Csar Martnez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC