Buscar en este blog

miércoles, 21 de noviembre de 2007

ORACLE. paginación con oracle. LIMIT en oracle.

Se trata de anidar las consultas. Introducimos nuestra consulta $sql dentro de otras dos consultas que controlan las filas obtenidas en la consulta.

$sql_paginada="
SELECT * FROM (
SELECT ROWNUM AS FILA, CONSULTA.* FROM (
$sql
)
CONSULTA
)
WHERE FILA > $Desde AND FILA <= $Hasta
";

4 comentarios:

[Neuromante] dijo...

Gracias me sirvio! ;)

Care dijo...

perfecto!!!

remigia dijo...

Buenas
Tengo una duda, la paginación funciona perfectamente, pero necesito obtener el número de registros que devuleve la consulta interna, y así devolver el número de registro que podría devolver y el que realmente devuelvo tras la paginación.
He probado varias cosas pero no encuentro la solución.
Gracias

mugedoc dijo...

Hay varias soluciones, la mas sencilla aunque habrá mejores, es hacer primero la consulta que tengas en $sql pero con COUNT:

$sql_numero_filas="SELECT COUNT(*) FROM TABLA WHERE CONDICIONES"

Y luego hacer la consulta paginada.

También puedes recoger información del cursor V$SQL como ROWS_PROCESSED , END_OF_FETCH_COUNT ...

En MySQL tras la consulta con LIMIT puedes lanzar: SELECT FOUND_ROWS(); que te devolverá la cantidad de filas que devolvería sin el LIMIT.

Pero en ambos casos te recomiendo usar siempre SQL standard ya que te será válido para cualquier base de datos