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

7CM13 Jesus Alejandro Lechuga Ortega

Cursor

Área memoria privada que contiene información procedente de la ejecución de una sentencia SELECT.
Cada cursor tiene unos atributos que nos devuelven información útil sobre el estado del cursor en la
ejecución de la sentencia SQL. Cuando un cursor está abierto y los datos referenciados por la consulta
SELECT cambian, estos cambios no son recogidos por el cursor.

PL/SQL crea implícitamente un cursor para todas las sentencias SQL de manipulación de datos sobre
un conjunto de filas, incluyendo aquellas que solo devuelven una sola fila.
En PL/SQL no se pueden utilizar sentencias SELECT de sintaxis básica ( SELECT <lista> FROM
<tabla> ). PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es un
conjunto de registros devuelto por una instrucción SQL.
Un cursor se define como cualquier otra variable de PL/SQL y debe nombrarse de acuerdo a los
mismos convenios que cualquier otra variable.

Los cursores implícitos se utilizan para realizar consultas SELECT que devuelven un único registro.
Deben tenerse en cuenta los siguientes puntos cuando se utilizan cursores implícitos:

Los cursores implícitos no deben ser declarados


• Con cada cursor implícito debe existir la palabra clave INTO.
• Las variables que reciben los datos devueltos por el cursor tienen que contener el mismo tipo de
dato que las columnas de la tabla.
• Los cursores implícitos solo pueden devolver una única fila. En caso de que se devuelva más de
una fila (o ninguna fila) se producirá una excepción. Las más comunes son:
• NO_DATA_FOUND: Se produce cuando una sentencia SELECT intenta recuperar datos pero
ninguna fila satisface sus condiciones. Es decir, cuando “no hay datos”.
• TOO_MANY_ROWS Dado que cada cursor implícito sólo es capaz de recuperar una fila, esta
excepción detecta la existencia de más de una fila.
7CM13 Jesus Alejandro Lechuga Ortega

sys_refcursor
REF CURSOR es una variable, definida como un tipo de cursor, que apuntará o hará referencia a un
resultado de un cursor.

Ventajas de los REF CURSOR.


• A diferencia de un cursor normal, un REF CURSOR puede ser pasado como variable a un
Procedimiento y/o una Función.
• El valor contenido en un REF CURSOR para ser asignado a otras variables REF CURSOR.
• Una variable REF CURSOR puede ser el valor de retorno de una función.

Nota: Una variable REF CURSOR no es un cursor, sino una variable que apunta a un cursor. Antes de
asignar una variable cursor, debe definirse un tipo cursor.

Weak REF Cursor:


Clasificamos como Weak(débil) a una variable REF CURSOR en la cual no se defina el tipo de dato
que la misma retornara.
Eje:
TYPE typ_ref_cur IS REF CURSOR;

Strong REF Cursor:


En estos se define lo que el cursor va a devolver. Hay que tener en cuenta que si se trata de devolver
algo distinto que su tipo de retorno, se genera una excepción "ROWTYPE_MISMATCH".
Eje:
TYPE typ_ref_cur IS REF CURSOR
RETURN hr.employees%ROWTYPE;

Nota: Los Strong REF Cursor resultan menos flexible pero a la vez menos propensos a errores de
programación que los Weak REF Cursor. Esto porque con los Strong REF Cursor el compilador
PL/SQL verifica(en tiempo de compilación) que la cláusula FETCH tenga una variable/record acorde
con el tipo de retorno del cursor.

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