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

[SOLUCIONADO] cursor del oracle

Estas en el tema de cursor del oracle en el foro de Oracle en Foros del Web. Hola gente gracias desde ya, A ver si alguien me puede ayudar, pasa que necesito retornar el resultado de un select en un cursor, lo ...
  #1 (permalink)  
Antiguo 12/06/2013, 16:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta cursor del oracle

Hola gente gracias desde ya,
A ver si alguien me puede ayudar, pasa que necesito retornar el resultado de un select en un cursor, lo estoy haciendo asi:

CREATE OR REPLACE procedure p1 (c1 out sys_refcursor)
as
begin

open c1 for select * from t1;



IF c1%ROWCOUNT=1 THEN
DBMS_OUTPUT.PUT_LINE('found');
ELSE
DBMS_OUTPUT.PUT_LINE(TO_CHAR('not found'));
END IF;
end;

en este caso la tabla t1 tiene dos registros el tema es q el print siempre dice q hay cero registros.Que alguien me diga por favor que estoy haciendo mal. Gracias
-------------------------
resultado:
-------------------------
0
not found
  #2 (permalink)  
Antiguo 13/06/2013, 07:27
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: cursor del oracle

IF c1%ROWCOUNT=1 THEN

Si tienes dos registros, entonces la condición no te cumple y se va por el else que dices en tu programa que equivale a 0.

Si pones IF c1%ROWCOUNT>0 THEN sería una condición mas acertada a lo que quieres
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/06/2013, 09:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: cursor del oracle

Hola Huesos: Gracias por responder. Realmente el if estaba incorrecto, pero porq razón el retorna 0 registros? esto es lo q se ve en el watches "flags:[%ISOPEN, 1st iteration], rowcount:0", eso es lo q no comprendo porq si la tabla tiene datos el devuelve 0.
  #4 (permalink)  
Antiguo 13/06/2013, 12:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: cursor del oracle

Hola geihidfon

Según la doc oficial:
Cita:
%ROWCOUNT Attribute
A cursor attribute that can be appended to the name of a cursor or cursor variable. When a cursor is opened, %ROWCOUNT is zeroed. Before the first fetch, cursor_name%ROWCOUNT returns 0. Thereafter, it returns the number of rows fetched so far. The number is incremented if the latest fetch returned a row.
http://docs.oracle.com/cd/B12037_01/...3_elems011.htm

En pocas palabras, esta variable se habilita cuando hagas el primer fetch.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 13/06/2013, 13:35
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: cursor del oracle

De hecho eso fue lo que hice lo recorrí en un fetch y ahí si muestra los datos de la tabla.
Gracias por tu ayuda.

Etiquetas: cursor, tabla
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 23:13.