자바에서 개발하면서 페이지처리에 대한 기준을 만들고자 정리 하였습니다.
프로그램에서는 SQL 그대로 작성해 주고, 페이지 처리는 SQL 유틸에서 파싱하면 될 것입니다.
물론, SQL 유틸은 프로젝트 팀에서 별도로 만들던가, 프레임웍을 도입해서 사용하면 되겠죠.
<< 참조 페이지 >>
사전사항.
1. Sorting이 없을 경우 가능하다면 Sorting 하지 않도록 합니다.
2. 메인 SQL에서 SELECT ROWNUM NUM은 SQL작성 시 제외합니다.
3. 메인 SQL의 ROWNUM은 SQL 유틸에서 자동파싱처리를 해 주어야 합니다.
프로그램에서 작성된 SQL문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000
프로그램에서 SQL 파싱처리 후 SQL 결과문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM (SELECT ROWNUM NUM, CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000
AND ROWNUM <= 10)
WHERE NUM >= 2
사전사항.
1. Sorting하는데 인덱스 컬럼일 때 프로그래머가 소팅하고자 하는 컬럼의 인덱스 유무를 알고 있어야 하며, 반드시 Sorting할 컬럼에 인덱스가 있어야 합니다.
2. 메인 SQL로직의 ROWNUM NUM과 ROWNUM은 SQL유틸에서 자동파싱해 주어야 합니다.
프로그램에서 작성된 SQL문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE CUST_ID BETWEEN 2300 AND 500000
ORDER BY CUST_ID
프로그램에서 SQL 파싱처리후 SQL 결과문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM (SELECT ROWNUM NUM, CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE CUST_ID BETWEEN 2300 AND 500000
AND ROWNUM <= 10
ORDER BY CUST_ID)
WHERE NUM >= 2
사전사항.
소팅하는데 인덱스 컬럼이 없으며, 프로그램 단에서는 메인 SQL만 작성해야 합니다.
프로그램에서 작성된 SQL문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000
ORDER BY CUST_ID
프로그램에서 SQL 파싱처리후 SQL 결과문
SELECT NUM, CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM (SELECT ROWNUM NUM, CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM (SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000
ORDER BY CUST_ID)
WHERE ROWNUM <= 10)
WHERE NUM >= 2
사전사항.
페이지의 총 건수를 구하고자 할 때는 먼저 주어진 쿼리에서 총 COUNT를 구하는 유틸을 사용 하는데, 유틸 사용 시 ORDER BY Sorting은 반드시 제거해야 합니다. 그리고 조인과 같은 복잡한 쿼리에서는 총 COUNT를 미리 알수 있는 메인 테이블이 있다면, 별도로 총 COUNT를 구하는 SQL을 작성해야 합니다.
프로그램에서 작성된 SQL문
SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000
ORDER BY CUST_ID
프로그램에서 SQL 파싱처리후 SQL 결과문(ORDER BY 구문 제외 필수)
SELECT count(*)
FROM (SELECT CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME
FROM MEM_LIST CU
WHERE TRIM(CUST_ID) BETWEEN 2300 AND 500000)
'DataBase > Oracle' 카테고리의 다른 글
[퍼옴]Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 (0) | 2008.08.08 |
---|---|
[퍼옴]한글을 2byte로 계산하여 리턴 받으려면(LENGTH와 LENGTHB함수) (0) | 2008.08.08 |
[퍼옴]파티션 테이블의 관리 (0) | 2008.08.08 |
[퍼옴]질문과 답변에 올라온 오라클 TIP들 (0) | 2008.08.08 |
[퍼옴]중복된 RECORD 삭제 방법 (0) | 2008.08.08 |