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

Cursor que muestre 10 registros primeros

Estas en el tema de Cursor que muestre 10 registros primeros en el foro de Oracle en Foros del Web. Buenas, me gustaría saber como puedo mostrar en un cursor ke solo me muestre los 10 primeros registros. Mi cursor es el siguiente: Código HTML: ...
  #1 (permalink)  
Antiguo 04/12/2006, 06:46
 
Fecha de Ingreso: septiembre-2005
Mensajes: 379
Antigüedad: 18 años, 7 meses
Puntos: 0
Cursor que muestre 10 registros primeros

Buenas, me gustaría saber como puedo mostrar en un cursor ke solo me muestre los 10 primeros registros.
Mi cursor es el siguiente:


Código HTML:
         cursor numeros is                                                        │
 │     select movi_ano, movi_ord, movi_ctrl                                   │
 │       from movimientos                                                 │
 │      where movi_ano= v_ano                                                 │
 │                                                                            │
 │  union                                                                     │
 │     select pm_ano, pm_ord, pm_ctrl                                         │
 │       from propuestas_movimientos                                   │
 │      where pm_ano= v_ano                                                   │
 │      order by 1,2 desc;            

GRACIAS
  #2 (permalink)  
Antiguo 04/12/2006, 08:35
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años
Puntos: 3
Bueno, cuando recorres tu cursor, puedes inicializar una variable tipo int o number. Por cada fila recorrida, incrementas el contador, y en cada fila recorrida haces una condición si es igual o menor al numero deseado:

contador NUMBER:=0;

FOR cursor_nombre IN cursor_nombre_real LOOP

sentencias.....:
IF contador<=10 THEN
bla bla bla
EXIT;
END IF;

contador:=contador+1;

END LOOP;

Mas o menos asi...
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #3 (permalink)  
Antiguo 04/12/2006, 10:49
 
Fecha de Ingreso: noviembre-2006
Mensajes: 5
Antigüedad: 17 años, 5 meses
Puntos: 0
Buenas, también podrías probar con una Subselect en el cursor. Algo de este estilo.

cursor numeros is
SELECT a,b,c FROM (select movi_ano a, movi_ord b, movi_ctrl c
from movimientos
where movi_ano= v_ano
union
select pm_ano a, pm_ord b, pm_ctrl c
from propuestas_movimientos
where pm_ano= v_ano
order by 1,2 desc)
WHERE ROWNUM<11;

un saludo.
  #4 (permalink)  
Antiguo 04/12/2006, 11:22
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
select *
from (
select rownum, otros campos
from mi_tabla
)
where rownum<11
  #5 (permalink)  
Antiguo 04/12/2006, 16:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 379
Antigüedad: 18 años, 7 meses
Puntos: 0
Gracias a todos. Me ha gustado la solucion esta:
Código HTML:
contador NUMBER:=0;

FOR cursor_nombre IN cursor_nombre_real LOOP

IF contador<=10 THEN

EXIT;
END IF;

contador:=contador+1;

END LOOP;
Con el FOR tengo cargado mi primer registro, luego el segundo etc...
Con la sentencia IF conta <= 10 mostrará del 1 al 10.
Pero como sería para mostrarlos? Que es lo ke hay ke poner para ke me devuelva esos 10 registros?

Gracias de verdad. Peronadme pero acabo de empezar con todo esto y aun me cuesta una barbaridad.
  #6 (permalink)  
Antiguo 05/12/2006, 08:19
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años
Puntos: 3
Todo depende de lo que quieras hacer y como lo quieres hacer. Deseas mostrarlo en un procedure? almacenarlos en variables?, por que también podrias hacer sin necesidad de hacer un cursor o hacer un procedure.
Una forma que te lo muestre por pantalla es, en cada registro avanzado en el LOOP le agregas:

dbms_output.put_line(variables);

Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #7 (permalink)  
Antiguo 05/12/2006, 11:38
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
La solución que escojistes esta recuperando toda la data en un cursor, luego solo recuperaras 10 registros. Esta solución es la menos rentable para el procesador de la maquina, ya que en el cursor tendras toda la data.

En cambio la solucion 2 y 3 recuperas en el instante solo 10 registros

Es solo una sujerencia
  #8 (permalink)  
Antiguo 05/12/2006, 11:46
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años
Puntos: 3
Concuerdo con diegopedro, por eso el post anterior la consulta es, que es lo que deseas hacer, tan solo mostrar 10 registros?, se puede hacer mediante una consulta sin necesidad de hacer un cursor, ahora, si quieres los 10 primeros registros que salen, rownum<=10 no necesariamente va a sacar los 10 primeros. En un post de este mismo sub-foro (Oracle) esta una respuesta sobre como sacar los registros que deseas.
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
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 20:13.