Seleccionar 10 principales llamadas

Hola
Estoy elaborando un procedimiento dentro de un package con un cursor que me debe retornar las 10 principales ciudades a las que ha llamado una persona sin importar que esta haya llamado a muchas más, lo que he podido averiguar es que esta condición va en el fetch del cursor, pero no entiendo como hacerlo te agradecería si me ayudaras, ya que en el problema pasado me fue muy útil tu ayuda.
Gracias
Aquí le envío el paquete con el procedimiento.
create or replace package pk_buscar as
TYPE RESULT IS REF CURSOR;
PROCEDURE PR_CIUDADES
(V_CIUDAD IN CIUDAD.DESCRIPCION%TYPE,
RECORRER OUT RESULT);
END PK_BUSCAR;
/
CREATE OR REPLACE PACKAGE BODY PK_BUSCAR AS
PROCEDURE PR_CIUDADES (V_CIUDAD IN CIUDAD.DESCRIPCION%TYPE,
RECORRER OUT RESULT) IS
p principales;
BEGIN
OPEN RECORRER FOR SELECT destino FROM totxabonado;
LOOP
FETCH RECORRER INTO p; <--No entiendo como especificar aqui que me seleccione solo las 10 primeras ciudades-->
EXIT WHEN RECORRER%NOTFOUND;
END LOOP;
CLOSE RECORRER;
END PR_CIUDADES;
END PK_BUSCAR;
/

1 respuesta

Respuesta
1
El fetch en un cursor es únicamente una sentencia que introduce un registro del cursor (el siguiente al actual) en una variable.
Lo que tienes que hacer es introducir una clausula where en la consulta, haciendo un filtro que deseche los registros que no necesitas.
- Si lo que necesitas son los 10 primeros destinos (no importa cómo sea el orden en la tabla), añade a la select lo siguiente:
where rownum < 11
- Si lo que necesitas son los destinos más importantes, y conoces estos destinos (es decir, algo así como Madrid, Barcelona, etc...), añade esto:
where destino in ('Madrid', 'Barcelona',...)
- Si la importancia de los destinos viene dada por algún dato en concreto, ya es otra historia (no puedes meter una clausula order by en un cursor). Si es este el caso, dímelo y me lo planteo de otra forma.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas