Ответ 1
Для ограничения результатов вам нужно использовать псевдокоманду rownum
. См. Здесь:
http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Я разрабатываю веб-приложение и нуждаюсь в результатах, упорядоченных по страницам. Я нормально использую LIMIT/OFFSET для этой цели.
Каков наилучший способ публикации результатов в Oracle? Я видел несколько образцов, используя rownum и подзапросы. Это так? Не могли бы вы дать мне образец для перевода этого SQL в Oracle:
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
OFFSET 5 LIMIT 14
(Я использую Oracle 10g, для чего это стоит)
Спасибо!
Ответ: Используя ссылку, представленную ниже karim79, этот SQL будет выглядеть так:
SELECT * FROM (
SELECT rownum rnum, a.*
FROM(
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
) a
WHERE rownum <=5+14
)
WHERE rnum >=5
Для ограничения результатов вам нужно использовать псевдокоманду rownum
. См. Здесь:
http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Поскольку вы на 10g, вы должны иметь возможность упростить подход ROWNUM с использованием аналитических функций
SELECT fieldA,
fieldB
FROM (SELECT fieldA,
fieldB,
row_number() over (order by fieldA) rnk
FROM table_name)
WHERE rnk BETWEEN 5 AND 14;
В соответствии с оракулом 12c вы можете использовать первые N запросов.
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
OFFSET 5 ROWS FETCH NEXT 14 ROWS ONLY;
http://www.oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php