Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Cómo determinar si un cursor tiene registros?

Estas en el tema de Cómo determinar si un cursor tiene registros? en el foro de Oracle en Foros del Web. Buenas, tengo el cursor previamente abierto pero no debo recorrerlo, es decir, antes de hacerle cualquier fetch. De momento lo unico que se me ha ...
  #1 (permalink)  
Antiguo 27/04/2015, 15:42
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 73
Antigüedad: 5 años, 2 meses
Puntos: 1
Cómo determinar si un cursor tiene registros?

Buenas, tengo el cursor previamente abierto pero no debo recorrerlo, es decir, antes de hacerle cualquier fetch. De momento lo unico que se me ha ocurrido es utilizar un count para la misma select antes del cursor pero obviamente va pesimo porque se realiza la misma consulta 2 veces excepto q la primera es solo para contar.
Favor su apoyo, gracias
  #2 (permalink)  
Antiguo 30/04/2015, 06:22
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 12 años, 6 meses
Puntos: 43
Respuesta: Cómo determinar si un cursor tiene registros?

un cursor solo se abre si tiene algo que devolver
  #3 (permalink)  
Antiguo 01/05/2015, 11:39
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 73
Antigüedad: 5 años, 2 meses
Puntos: 1
Respuesta: Cómo determinar si un cursor tiene registros?

Cita:
Iniciado por jc3000 Ver Mensaje
un cursor solo se abre si tiene algo que devolver
Agradezco tu repuesta, pero si ejecutas el siguiente bloque anónimo (con un user DBA) observarás en la salida que el cursor se abre a pesar que no tiene registros, por tanto, comprobar si está abierto o no, no me funciona.
Código SQL:
Ver original
  1. DECLARE
  2.    vCursor sys_refcursor;
  3. BEGIN
  4.    OPEN vCursor FOR
  5.    SELECT * FROM sys.all_objects a
  6.    WHERE a.owner = 'OWNER_NO_EXISTENTE';
  7.    
  8.    IF vCursor%isopen THEN
  9.       dbms_output.put_line('El cursor está abierto, se procede a cerrarlo.');
  10.       close vCursor;
  11.    ELSE
  12.       dbms_output.put_line('El cursor NO está abierto.');
  13.    END IF;
  14. exception
  15.    WHEN others THEN
  16.       dbms_output.put_line(sqlerrm);
  17. END;

Saludos.
  #4 (permalink)  
Antiguo 02/05/2015, 04:21
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 12 años, 6 meses
Puntos: 43
Respuesta: Cómo determinar si un cursor tiene registros?

utiliza esto ( adaptándolo a tus necesidades ).

Código SQL:
Ver original
  1. DECLARE
  2. cursor cursor1 IS
  3. SELECT * FROM sys.all_objects a
  4. WHERE a.owner = 'OWNER_NO_EXISTENTE';
  5. BEGIN
  6.  
  7. FOR reg IN cursor1 loop
  8.  
  9. dbms_output.put_line('El cursor está abierto.');
  10.  
  11. END loop;
  12.  
  13. END;


Por cierto, para leer ALL_OBJECTS no necesitas ser dba ni poner el sys por delante.

Etiquetas: cursor, determinar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:50.