I'm developing a web application and need to page ordered results. I normaly use LIMIT/OFFSET for this purpose.
Which is the best way to page ordered results in Oracle? I've seen some samples using rownum and subqueries. Is that the way? Could you give me a sample for translating this SQL to Oracle:
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
OFFSET 5 LIMIT 14
(I'm using Oracle 10g, for what it's worth)
Thanks!
Answer: Using the link provided below by karim79, this SQL would look like:
SELECT * FROM (
SELECT rownum rnum, a.*
FROM(
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
) a
WHERE rownum <=5+14
)
WHERE rnum >=5
You will need to use the
rownum
pseudocolumn to limit results. See here:http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.htmlhttp://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Method-1: For database version Oracle12c or higher
Method-2: For database version Oracle11g or lower using analytical function RowNumber()
Method-3: For database version Oracle11g or lower using RowNum
In some cases, I have found method-3 is faster than method-2 since order by clause is mandatory in method 2. However, if your database version is 12c or higher you must go for method-1.
As of oracle 12c, you could use the top N queries.
http://www.oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php
Since you're on 10g, you should be able to simplify the ROWNUM approach using analytic functions