Las consultas que ordenan los datos y obtienen partes de ellos ordenados son llamadas TOP_N consultas. Al contrario que en otros motores de bases de datos, hasta el momento Oracle resolvia estas consultas mediante el ROWNUM y otras tecnicas similares
.
En la version 12c Oracle ya nos brinda la funcionalida de ROW_LIMITING, que viene a ser el uso de un offset y un principio y fin en estas consultas. La sintaxis para usarla en la cláusula SELECT es:
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
{ ROW | ROWS } { ONLY | WITH TIES } ]
Algunas consultas serín:
SELECT val FROM tabla1 ORDER BY campo
FETCH FIRST 5 ROWS;
SELECT val FROM tabla1 ORDER BY campo
FETCH FIRST 10 PERCENT ROWS ONLY;
SELECT val FROM tabla1 ORDER BY campo
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
Si lo quisiesemos con duplicados
SELECT val FROM tabla1 ORDER BY campo DESC FETCH FIRST 5 ROWS WITH TIES;
Cosas a tener en cuenta
- Si no especificamos offset este será cero
- Igualmente, si ponemos un offset negativo sera cero también
- Si ponemos un valor nulo en offset,rowcount o porcentaje, la consulta no devolver nada
- Los valores de offset,rowcount o porcentaje son truncados en caso de no ser enteros
- Si el porcentaje que indicas es mayor que el numero de filas que quedan devolverá todas
- Las palabras ROW y ROWS son intercambiables
NOTA:Estas opciones no pueden usarse en clasulas FOR UPDATE , en secuencias CURRVAL/NEXTVAL o en cláusulas de fast refresh de vistas materializadas.
ms información como siempre en