> 데이터 베이스 > MySQL 튜토리얼 > Oracle의 ROWNUM: 적절한 페이지 매김을 달성하고 일반적인 함정을 피하는 방법은 무엇입니까?

Oracle의 ROWNUM: 적절한 페이지 매김을 달성하고 일반적인 함정을 피하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-19 06:18:10
원래의
527명이 탐색했습니다.

ROWNUM in Oracle: How to Achieve Proper Pagination and Avoid Common Pitfalls?

Oracle ROWNUM 및 페이지 매김: 일반적인 문제 및 해결 방법

이 문서에서는 Oracle SQL에서 페이지 매김을 위해 ROWNUM을 사용할 때 자주 발생하는 문제에 대해 설명합니다.

문제 1: WHEREROWNUM을 사용한 비효과적인

SELECT * FROM Person WHERE rownum > 100가 결과를 반환하지 않는 이유는 무엇입니까?

ROWNUM은 초기 필터링(조건자) 단계 이후에 할당됩니다. ROWNUM 값은 할당 후에만 증가하므로 이러한 방식으로 WHERE 절을 사용하여 1보다 큰 값을 직접 선택할 수 없습니다. ROWNUM > 100.

조건을 만족하는 행이 없습니다.

문제 2: ROWNUM BETWEEN 제한사항

WHERE rownum BETWEEN lowerBound AND upperBound이 페이지네이션에 적합하지 않은 이유는 무엇인가요?

이 구문은 ROWNUM 할당이 WHERE 절 평가보다 우선하므로 효과적이지 않습니다. Oracle은 ROWNUM

범위를 직접 선택할 수 없습니다.

솔루션: Oracle 12c 이상(상위 n 행 제한)

Oracle 12c에서는 OFFSETFETCH을 사용하는 "상위 n 행 제한"이라는 뛰어난 접근 방식을 도입했습니다. 예:

<code class="language-sql">SELECT empno, sal
FROM   emp
ORDER BY sal
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;</code>
로그인 후 복사

이렇게 하면 행 5-8(오프셋 4, 페치 4)이 효율적으로 검색됩니다. 이 방법은 ROWNUM에만 의존하는 기술보다 선호됩니다.

문제 3: ROWNUM 열 숨기기

결과 세트에 ROWNUM 열이 표시되지 않도록 하려면 어떻게 해야 하나요?

외부 SELECT 문에 원하는 열만 나열하면 됩니다. 또는 SQL*Plus에서 NOPRINT 명령을 사용하여 특정 열의 출력을 억제할 수 있습니다.

문제 4: ROWNUM(이전 Oracle 버전)으로 올바른 페이지 매김 보장

ROWNUM올바른 페이지 매김을 달성할 수 있나요?

예, 하지만 중첩된 쿼리 구조가 필요합니다.

<code class="language-sql">SELECT val
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   t
                ORDER BY val)
        WHERE rownum <= 8)
WHERE  rnum >= 5;</code>
로그인 후 복사

이렇게 하면 행 5-8이 올바르게 검색됩니다. 내부 쿼리는 ROWNUM을 할당하고, 중간 쿼리는 상한을 기준으로, 외부 쿼리는 하한을 기준으로 필터를 할당합니다. 그러나 Oracle 12c 이상에서는 OFFSET/FETCH 메서드가 더 효율적이고 읽기 쉬운 옵션으로 남아 있습니다.

위 내용은 Oracle의 ROWNUM: 적절한 페이지 매김을 달성하고 일반적인 함정을 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿