Sea la consulta:
SELECT primera_columna, segunda_columna FROM mi_tabla
Si queremos recuperar los registros que se encuentran entre las filas n_start_row y n_end_row, nuestra consulta seria:
SELECT *
FROM ( SELECT A.*, ROWNUM row_number
FROM (
SELECT primera_columna, segunda_columna
FROM mi_tabla
) A
WHERE ROWNUM <= n_end_row
)
WHERE row_number >= n_start_row;
Ahora si queremos paginar, primero tendriamos que saber cuantos registros recupera nuestra consulta (n_row_count) y definir el número de registros por cada página (n_page_size). Por ejemplo:
DECLARE
CURSOR c_row_count
IS
SELECT count(1)
FROM (
SELECT primera_columna, segunda_columna
FROM mi_tabla
);
--
n_page_size NUMBER(2) := 10;
n_row_count c_row_count%ROWTYPE;
BEGIN
OPEN c_row_count;
FETCH c_row_count INTO n_row_count;
CLOSE c_row_count;
--
-- Pintamos los números de las páginas
--
IF n_row_count > n_page_size
THEN
FOR x IN 1..CEIL(n_row_count/n_page_size)
LOOP
dbms_output.put_line('n_page_number: ' || x);
END LOOP;
END IF;
END;
/
Asumiendo que el número de la pagina sea n_page_number y el número de registros por página sea n_page_size.
SELECT *
FROM ( SELECT A.*, ROWNUM row_number
FROM (
SELECT primera_columna, segunda_columna
FROM mi_tabla
) A
WHERE ROWNUM < ((n_page_number * n_page_size) + 1 )
)
WHERE row_number >= (((n_page_number-1) * n_page_size) + 1);





