jueves, 28 de mayo de 2026

C贸mo usar SELECT FETCH y SELECT OFFSET en Oracle SQL

馃殌 Paginaci贸n Avanzada en Oracle: Gu铆a de OFFSET, FETCH y PERCENT ROWS

Cuando trabajamos con grandes vol煤menes de datos en entornos empresariales, recuperar miles de registros de golpe es un error cr铆tico que afecta el rendimiento de la base de datos y la experiencia del usuario. La soluci贸n ideal es la paginaci贸n.

En este art铆culo aprender谩s a dominar la sintaxis nativa de **Oracle Database** para limitar y saltar registros utilizando OFFSET, FETCH y la potente variante PERCENT, utilizando como referencia las estructuras que encuentras en entornos de pr谩ctica como **FreeSQL**.

馃挕 Entendiendo OFFSET y FETCH en Oracle

Desde la versi贸n Oracle 12c (y totalmente vigente en las versiones actuales de FreeSQL), contamos con una sintaxis est谩ndar y muy limpia para la paginaci贸n de resultados:

  • OFFSET: Indica cu谩ntas filas debe **saltarse** la consulta antes de empezar a devolver datos.
  • FETCH NEXT / FIRST: Especifica el **n煤mero exacto de filas** (o el porcentaje) que se desean recuperar.
⚠️ Regla de Oro en Oracle: Para que la paginaci贸n sea predecible y consistente, siempre debes incluir la cl谩usula ORDER BY. De lo contrario, Oracle omitir谩 filas de forma aleatoria seg煤n el plan de ejecuci贸n interna.

馃洜️ Caso Pr谩ctico: Estructura FreeSQL (Tabla EMP)

Para nuestros ejemplos, utilizaremos la cl谩sica tabla de entrenamiento EMP (Empleados) disponible en los esquemas de FreeSQL. Imaginemos que tenemos los siguientes datos ordenados por salario (SAL) de mayor a menor:

EMPNO (ID) ENAME (Nombre) JOB (Puesto) SAL (Salario)
7839KINGPRESIDENT5000
7788SCOTTANALYST3000
7902FORDANALYST3000
7566JONESMANAGER2975
7698BLAKEMANAGER2850

Ejemplo 1: Obtener los 2 empleados con mayor salario

Si s贸lo queremos limitar la cantidad de resultados sin saltarnos nada, omitimos el OFFSET (o lo dejamos en 0) y usamos FETCH FIRST:

SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 2 ROWS ONLY;

Resultado: KING ($5000) y SCOTT ($3000).

Ejemplo 2: Paginaci贸n - Saltarse los 2 primeros y traer los siguientes 2

Aqu铆 combinamos ambas cl谩usulas. Ideal para cuando el usuario pasa a la "P谩gina 2" de un reporte:

SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
OFFSET 2 ROWS
FETCH NEXT 2 ROWS ONLY;

Resultado: Excluye a KING y SCOTT, devolviendo a FORD ($3000) y JONES ($2975).

馃搱 Control Din谩mico con PERCENT ROWS ONLY

Una de las joyas ocultas de Oracle SQL es la capacidad de limitar los resultados bas谩ndose en un porcentaje din谩mico de la tabla en lugar de un n煤mero fijo de filas. Esto se logra con la instrucci贸n PERCENT ROWS ONLY.

Imagina que tu tabla EMP crece constantemente y necesitas un reporte que extraiga siempre el Top 20% de los empleados mejor pagados de la organizaci贸n.

SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 20 PERCENT ROWS ONLY;

¿C贸mo calcula esto Oracle internamente?

  • Si la tabla tiene 5 empleados (como nuestro ejemplo), el 20% equivale a 1 fila (KING).
  • Si la tabla escala y FreeSQL simula 100 empleados, la consulta devolver谩 autom谩ticamente las 20 filas superiores sin necesidad de modificar el c贸digo de tu aplicaci贸n.

¿Qu茅 pasa con los empates? (Cl谩usula WITH TIES)

En el ejemplo 1 vimos que SCOTT y FORD ganan lo mismo ($3000). Si pidi茅ramos un porcentaje que corte justo en medio de salarios id茅nticos, podr铆amos perder informaci贸n relevante. Para solucionar esto, puedes cambiar ONLY por WITH TIES:

SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 40 PERCENT ROWS WITH TIES;

Esto asegura que si el 煤ltimo registro del porcentaje empata en valores con las siguientes filas, Oracle las incluir谩 todas en el resultado para no sesgar el reporte.

馃幆 Conclusi贸n

El est谩ndar ANSI implementado en Oracle hace que construir sistemas de paginaci贸n web o aplicaciones de anal铆tica de datos en plataformas como FreeSQL sea una tarea intuitiva y limpia. Ya no es necesario recurrir a las complejas subconsultas anidadas con ROWNUM que hac铆an el c贸digo ilegible.

OFFSET y FETCH simplifican enormemente tareas comunes en Oracle SQL:

  • Paginaci贸n
  • Limitaci贸n de resultados
  • An谩lisis de muestras
  • Optimizaci贸n de consultas

¿Utilizas habitualmente PERCENT ROWS o prefieres paginaci贸n num茅rica fija? ¡D茅janos tus dudas o experiencias en la secci贸n de comentarios! 馃憞


Oracle SQL Bases de Datos FreeSQL Programaci贸n

No hay comentarios:

Publicar un comentario