Oracle - Duda con Cursor en Oracle

 
Vista:

Duda con Cursor en Oracle

Publicado por tipitipi (30 intervenciones) el 16/10/2008 22:32:18
Hola a todos:

Tengo el siguiente problema:

Dentro de un procedimiento, declaro un cursor. Lo abro y con FETCH NEXT lo recorro.

El problema es que se con certeza que cuando abro el cursor, se introducen en él 13 filas, y el bucle me da 14 pasadas. Una mas de las filas que el cursor tiene, por lo que tengo que ingeniarmelas para que el resultado sea el esperado.

Curiosamente la última pasada es la que repite siempre dos veces.

Adjunto el codigo para ver si alguien me puede ayudar:

---------------------------------------------------------------------------------------------------

DECLARE

--Declaramos el Cursor y la Variable en donde almacenaremos los datos
CURSOR C_Datos IS SELECT DNI FROM TP.L09_VISU_GENERAL GROUP BY DNI ORDER BY DNI asc;
Aux_Datos C_Datos%ROWTYPE;

BEGIN

--Borramos los Datos Contenidos en la Tabla de resultados
DELETE FROM L09_VISU_GENERAL_AUX;

LOOP
FETCH C_Datos INTO Aux_Datos;

. . . . INSTRUCCIONES . . . .

EXIT WHEN C_Datos %NOTFOUND;
END LOOP;

--Cerramos el Cursor de DNI's obtenidos
CLOSE C_Datos;

--Realizar Commit en la Tabla
COMMIT;

END;

---------------------------------------------------------------------------------------------------

Muchas Gracias y Saludos !!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda con Cursor en Oracle

Publicado por Rodolfo Reyes (59 intervenciones) el 17/10/2008 20:00:30
Cambia la forma en como recorres el cursor. A mi siempre me ha funcionado mejor de esta otra forma:

begin

Declare
--Declaras el cursor
Cursor empleados is
Select id,nombre
from empleados
where statatus = 'A';

Begin

--De esta manera lo recorres
--en vez de emp puedes poner cualquier identificador
For emp in empleados Loop

--Utilizas emp para acceder a los datos del cursor.
idactual := emp.id;
nombreactual := emp.nombre;

End Loop;
End;

end;

Como vez, de esta manera no tienes que utiliar FETCH, y el ciclo termina cuando llegas al ultimo registro de tu cursor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar