Cursores Pl/Sql
1. Cursores
2. Cursores explícitos
3. Atributos del Cursor
4. Variables de acoplamiento en el manejo de cursores
5. Cursor For..Loop
6. uso de alias en las columnas de selección del cursor
7. Cursores con parámetros
8. Atributos en cursores implícitos
9. Excepciones
10. Excepcionesinternas
11. Excepciones definidas por el usuario
12. Otras Excepciones
13. Propagación y ámbito de las Excepciones
14. Utilización de Raise_Application_Error
15. Control de Transacciones
16. Uso de cursores para actualizar filas
17. Ejercicios
1.- Cursores:
Hasta el momento hemos venido usando cursores implícitos. Este tipo es muy sencillo, pero plantea un problema:
•La subconsulta devuelve una fila, y sólo una, de lo contrario se produciría un error, por ello, dado que normalmente una consulta devolverá varias filas, se suelen manejar cursores explícitos.
2.-Cursores explícitos
Se utilizan para trabajar con subconsultas que pueden devolver mas de una fila. Hay 4 operaciones básicas para trabajar con cursores explícitos:
1. Declaración del cursor:Se declara en la zona de declaración, según la siguiente sintaxis:
CURSOR IS SELECT ;
2. Apertura del cursor: En la zona de instrucciones(Begin) habrá que abrir el cursor.
OPEN ;
Al hacerlo se ejecuta automáticamente la sentencia select asociada y sus resultados se almacenan en las estructuras internas de memoria, manejadas por el cursor.
3. Recogida deinformación: Para recoger la información almacenada en el cursor usaremos la siguiente sintaxis:
FETCH INTO {|};
Después del into figurará una variable que recogerá la información relativa a todas las columnas de una fila.
|Clt_num |Clt_nom |
|Pepe |Borrás|
| | |
En este caso la variable puede ser declarada de esta manera en la zona de declaración:
%rowtype;
Cada una recogerá la columna correspondiente a la cláusula select, por tanto serán del mismo tipo que las columnas. Cada fetch lo que hace es recuperar una fila y el cursoravanza automáticamente a la fila siguiente.
4. Cierre del Cursor:
Cuando el cursor no se va a utilizar, hay que cerrarlo:
CLOSE ;
Ejemplo: Vamos a visualizar el nombre y apellidos de todos los clientes.
/*-----declaracion*/
declare
cursor nom_apell is select clt_nom,clt_apell from
clientes;
nombreclientes.clt_nom%type;
apellido clientes.clt_apell%type;
begin
/*apertura*/
open nom_apell;
/*recogida de datos*/
fetch nom_apell into nombre,apellido;
while nom_apell%found loop
dbms_output.put_line('El nombre es: '||nombre ||' El
apellido es: '||apellido);
fetch nom_apell into nombre, apellido;
exit whennom_apell%notfound;
end loop;
/*cierre de cursor*/
close nom_apell;
end;
/
A diferencia de lo que ocurre con los cursores implícitos, la cláusula into, no aparece con la select, sino que aparece con Fetch. Cada vez que accede a una fila se guarda.
Explícitos: Con el fetch, Para visualizar un conjunto de filas.
Implícitos: Siempre unafila
Select into variable
Variable clientes.clt_nim%type;
3.- Atributos del Cursor:
Para conocer los detalles respecto a la situación del cursor, hay 4 atributos para consultar.
1.- %Found : Devuelve verdadero si el último fetch ha recuperado algún valor, en caso contrario devuelve falso. Si el cursor no está abierto, devolverá error y si...
Regístrate para leer el documento completo.