CURSORES IMPLICITOS
Declaración de cursores implicitos.
Los cursores implicitos se utilizan para realizar consultas SELECT que devuelven un único registro.
Deben tenerse en cuenta los siguientes puntos cuando se utilizan cursores implicitos:
- Con cada cursor implicito 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 implicitos solo pueden devolver una única fila. En caso de que se devuelva más de una fila (o ninguna fila) se producirá una excepcion. No se preocupe si aún no sabe que es una excepcion, le valdrá conocer que es el medio por el que PL/SQL gestiona los errores.
declare vdescripcion VARCHAR2( |
begin SELECT DESCRIPCION
INTO vdescripcion
from PAISES
WHERE CO_PAIS = 'ESP';
dbms_output.put_line('La lectura del cursor es: ' || vdescripcion);
end;
La salida del programa generaría la siguiente línea:
|
Excepciones asociadas a los cursores implicitos.
Los cursores implicitos sólo pueden devolver una fila, por lo que pueden producirse determinadas excepciones. Las más comunes que se pueden encontrar son no_data_found y too_many_rows.
CURSORES EXPLICITOS
Declaración de cursores explicitos
Los cursores explicitos se emplean para realizar consultas SELECT que pueden devolver cero filas, o más de una fila.
Para trabajar con un cursor explicito necesitamos realizar las siguientes tareas:
- Declarar el cursor.
- Abrir el cursor con la instrucción OPEN.
- Leer los datos del cursor con la instrucción FETCH.
- Cerrar el cursor y liberar los recursos con la instrucción CLOSE.
CURSOR nombre_cursor IS instrucción_SELECT |
También debemos declarar los posibles parametros que requiera el cursor:
CURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS instrucción_SELECT |
Para abrir el cursor
OPEN nombre_cursor;
o bien (en el caso de un cursor con parámetros) OPEN nombre_cursor(valor1, valor2, ..., valorN);
|
Para recuperar los datos en variables PL/SQL.
FETCH nombre_cursor INTO lista_variables;-- o bien ...FETCH nombre_cursor INTO registro_PL/SQL; |
Para cerrar el cursor:
|
El siguiente ejemplo ilustra el trabajo con un cursor explicito. Hay que tener en cuenta que al leer los datos del cursor debemos hacerlo sobre variables del mismo tipo de datos de la tabla (o tablas) que trata el cursor.
DECLARE CURSOR cpaises IS SELECT CO_PAIS, DESCRIPCION, CONTINENTE FROM PAISES; co_pais VARCHAR2(3); descripcion VARCHAR2(50); continente VARCHAR2(25); BEGIN OPEN cpaises; FETCH cpaises INTO co_pais,descripcion,continente; CLOSE cpaises; END; |
Podemos simplificar el ejemplo utilizando el atributo de tipo %ROWTYPE sobre el cursor.
DECLARE CURSOR cpaises IS SELECT CO_PAIS, DESCRIPCION, CONTINENTE FROM PAISES; registro cpaises%ROWTYPE; BEGIN OPEN cpaises; FETCH cpaises INTO registro; CLOSE cpaises; END; |
El mismo ejemplo, pero utilizando parámetros:
DECLARE CURSOR cpaises (p_continente VARCHAR2) IS SELECT CO_PAIS, DESCRIPCION, CONTINENTE FROM PAISES WHERE CONTINENTE = p_continente; registro cpaises%ROWTYPE; BEGIN OPEN cpaises('EUROPA'); FETCH cpaises INTO registro; CLOSE cpaises; END; |
Cuando trabajamos con cursores debemos considerar:
- Cuando un cursor está cerrado, no se puede leer.
- Cuando leemos un cursor debemos comprobar el resultado de la lectura utilizando los atributos de los cursores.
- 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.
la informacion de este blog la sacaste de http://www.devjoker.com/ se mas creativo/a
ResponderBorrarla informacion de este blog la sacaste de http://www.devjoker.com/ se mas creativo/a
ResponderBorraryo tengo un script de limpieza de datos
ResponderBorrar