select * from table1 where <조건문> order by aaa
의 결과값으로 10만개가 검색되었다고 했을 때, 이것을 모두 한꺼번에 받지 않고, 일부씩 끊어서 분할해서 처리하고 싶은데요, 예를 들어
select first 1000 skip 2000 * from table1 where <조건문> order by aaa
<= Firebird 2.0 에선 이러한 문법이 제공된다고 하더군요.
라는 문장으로 처음 2000개의 레코드를 건너뛰어서 1000개의 레코드만을 dataset에 넣으려고 합니다.
오라클에서는 문법이 어떻게 되는지요?
참고로, key 필드는 한개가 아니라 여러 필드로 구성되어 있기에 필드의 조건들 만으로 레코드의 갯수를 정할 수가 없을 것 같습니다.
이렇게 써보시면 어떨까요...
허접하지만 도움이 되셨으면 합니다.
SELECT *
FROM ( SELECT ROWNUM AS RECNO, <필드명1>, <필드명2>, ... , <필드명n>
FROM 테이블명
WHERE <조건문>
ORDER BY <정렬필드> )
WHERE RECNO BETWEEN <시작행번호> AND <시작행번호 + 1000>
ROWNUM이란 함수를 사용하였습니다. ORDER BY를 사용하게 되면 결과를 보시면 알겠지만 순서대로 ROWNUM을 부여하지는 않습니다. 만약 순서대로 정렬을 하려면 테이블을 아래와같이 한번더 하심이
그리고 ROWNUM을 가지고 2000번 행 부터 3000번 까지 가져오면 되지 않을까 싶네엽...
그럼 ....
SELECT *
FROM ( SELECT ROWNUM AS RECNO, <필드명1>, <필드명2>, ... , <필드명n>
FROM (SELECT <필드명1>, <필드명2>, ... , <필드명n> FROM 테이블명
WHERE <조건문>
ORDER BY <정렬필드> )
)
WHERE RECNO BETWEEN <시작행번호> AND <시작행번호 + 1000>