Oracle 페이징을 위한 LIMIT 및 OFFSET 대체 방법
웹 어플리케이션을 개발 중인데 주문된 결과를 페이지화해야 합니다.저는 보통 LIMIT/OFFSET을 사용하고 있습니다.
Oracle에서 주문된 결과를 페이지화하는 가장 좋은 방법은 무엇입니까?로넘과 서브쿼리를 사용한 샘플을 본 적이 있습니다.그게 방법인가요?이 SQL을 Oracle로 변환하기 위한 샘플을 주시겠습니까?
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
OFFSET 5 LIMIT 14
(Oracle 10g을 사용하고 있습니다.)
감사합니다!
답변: 이 SQL은 carim79에서 제공하는 링크를 사용하여 다음과 같습니다.
SELECT * FROM (
SELECT rownum rnum, a.*
FROM(
SELECT fieldA,fieldB
FROM table
ORDER BY fieldA
) a
WHERE rownum <=5+14
)
WHERE rnum >=5
Oracle 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
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;
를 사용해야 합니다.rownum
pseudocolumn을 지정하여 결과를 제한합니다.여기를 참조해 주세요.
http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
방법 1: 데이터베이스 버전 Oracle 12c 이상일 경우
SELECT fieldA, fieldB
FROM table
ORDER BY fieldA
OFFSET 5 ROWS FETCH NEXT 14 ROWS ONLY
방법-2: 분석함수 RowNumber()를 사용한 데이터베이스 버전 Oracle11g 이하
SELECT fieldA, fieldB
FROM (
SELECT fieldA, fieldB,
row_number() over (order by fieldA) rowRank
FROM table_name
)
WHERE rowRank BETWEEN 5 AND 14;
방법 3: RowNum을 사용하는 데이터베이스 버전 Oracle11g 이하인 경우
SELECT T.* FROM (
SELECT T.*, rowNum as rowIndex
FROM (
SELECT fieldA, fieldB,
FROM table_name
)T)T
WHERE rowIndex > 0 AND rowIndex <= 20;
경우에 따라서는 method-2보다 method-3이 빠르다는 것을 알게 되었습니다.method-2에서는 절에 의한 순서가 필수이기 때문입니다.단, 데이터베이스 버전이 12c 이상일 경우 method-1을 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle
'programing' 카테고리의 다른 글
npm install -> node-sass@4.5.0 포스트 인스톨 스크립트에서 실패했습니다. (0) | 2023.04.05 |
---|---|
각도 스코프 기능이 여러 번 실행됨 (0) | 2023.04.05 |
angularjs 페이지의 RESTful API에서 서비스에 액세스하는 방법은 무엇입니까? (0) | 2023.04.05 |
c#에서 동적으로 Json 생성 (0) | 2023.04.05 |
Angular에서 특정 템플릿을 재정의할 수 있습니까?UI 부트스트랩? (0) | 2023.04.05 |