[Tip] 오라클 페이징 아주 간단한 팁입니다.

위의 제목같은 내용입니다.

인덱스만 제데로 걸리면 속도도 뭐 그런데로 무난하게 나옵니다.
게시판을 만드는중에 아주 간단한 페이징 QUERY 하나 있으면 편하겠다 생각해서 만든겁니다.

흐~흠 거창한것은 아니구요 B2N 과 같이 일할때 이런식으로 페이징 하면 어떨까 해서 담당 컨설턴트와 잠시 이야기 했는데
대용량에서는 써먹기 힘들다는군요 ....(젠장...ㅠㅠ)
실행 계획을 봐도...뭐....쩝 그다지 좋은 것 같지는 않지만 중소규모에서는 아주 편안하게 쓸수가 있을것같습니다.

MSSQL 이나 MYSQL 에보면 TOP 질의나 LIMIT 같은것을 이용하는것을 응용했죠....참고로 MSSQL 에서는 NOT IN 을 이용하면 정말 퍼퍼먼스
좋게 만들수 있습니다.(별 쓸데없이 말을 많이 하는군요 쩝....죄송)


ⓐ..SELECT  *
        FROM
        (
ⓑ...............SELECT    ...
                        ,ROWNUM AS RNUM
                    FROM  (
ⓒ...............................SELECT  *
                                    FROM  TEST
                                  WHERE  DONG LIKE :S_NAME || '%'
                                )A
            WHERE  ROWNUM <= :S_NUM*10
        )AA
      WHERE  RNUM >= DECODE(AA.RNUM,1,:R_NUM,((:S_NUM-1)*10)+1)


흐흠....먼저 C 부터 설명을 하죠 이부분은 그냥.....검색 조건만 넣는거죠 :변수명 이렇게 쓰는건 TOAD 나 SQLGATE 에서
파라미터로 쓰이는것은 아시죠...골든 은 참고로 $ 입니다.

C에서 검색조건을 만들었으니 역순번호를 만들기위하여 인라인뷰로 만들고 B 부분에 RNUM 이라는 가상필드에 값을 넣었죠....
그럼 역순 필드를 맹글수 있습니다. 흐흐....여까지 이해하셨으면 뭐 끝난거죠....^^
그리고 ROWNUM 을 줍니다.  (참고로 *10 을한것은 1페이지 2페이지 3페이지 이런식으로 나오기 때문에 파라미터값에 1이 오게 되면 10개가 출력이 되겠죵...)

B부분 까지 이해 하셨으면 C 입니다. 머 이건 더 간단 한거죠 RNUM 보다 작거나 같은 것만 가져 오라는겁니다.
그리고 여기에 팁으로 1페이지는 10개가 정상적으로 나오지만 뒤에서 부터는 9 행 씩 가져옵니다. 이거 설명은 너무 기본적인거니까 그냥 ....
그래서 DECOE 를 이용하여 처리하였습니다.


그럼 프로그램에서는 어떻게 하느냐.....저는 이런식으로 합니다.
1. 조회 조건의 TOTAL 값을 가져오는 메소드를 만들고 위의 QUERY 중 C 부분에 전체 COUNT 를 가져옵니다.
    그리고 리턴을 하고 FOR  문을 돌려 게시판의 [1][2][3][4]... 뭐 이런것을 만들구요
2. 1을 클릭하면 받아들이는 메소드에서 위의 QUERY 를 실행하면 페이징이 되겠죠.....간단한가요....ㅠㅠ
    저는 이거 생각하느라 1시간동안 열쉼히 머리 굴렸습니다. (예전에 그렇게 머리 굴린거죠...^^)
3. 이거 게시판에 답변형이라던지 이런거 어떻게 만드느냐.....라고 물으신다면 C부분에 조회 조건을 주심 되죠
  아주 간단해요 ORDER BY 인덱스 DESC , 답변번호 ASC 이런거 하나 넣어주심 됩니다.


간단하죠...^^ 물론 훨씬 좋은 QUERY 도 있습니다. 대용량일때는 저도 그러한 방식으로 처리하구요 나중에 소계하기로 하죠....(좀복잡해요 XX파크 사이트에서 아키팀으로 있을때 개발을 했죠)
일단 제가 올린 게시판에 우편번호를 가지고 간단하게 맹글었습니다. 테스트로 한번 돌려보시려면 테이블 생성 하시고 테스트 해보시죠...

간단한 소스지만 게시판에 소스를 붙여넣으니 안예쁘군요....파일로 올려놓겠습니다.

Comments

이종철 2006.11.07 18:59
  좋은 내용 입니다.
Oracle Tip에 올려주시면 좋을것 같은데요^^
번호 제목 글쓴이 날짜 조회
132 네이티브 크로스 플랫폼인 citirne으로 개발한 쇼핑몰 app 소스 공개합니다. 씨트린 2012.08.01 6295
131 강좌 내용의 이미지가 깨지네요. ^^ 댓글+1 심원보 2007.12.07 3505
130 (IE7)'창 닫으시겠습니까' 메시지 없애는 방법 댓글+3 이종철 2007.03.21 5196
129 [정보] IE Dev Toolbar 쓰기 댓글+1 김철민 2006.12.05 6641
128 oracle create 스크립트 추출....... 댓글+4 김철민 2006.11.22 15816
127 ㅠㅜ .... 지나친 게으름과 시차적응 댓글+4 김철민 2006.11.17 4143
126 [Tip]알면 힘이되는 Prototype.js 김철민 2006.11.09 5160
열람중 [Tip] 오라클 페이징 아주 간단한 팁입니다. 댓글+1 김철민 2006.11.07 4710
124 간단히 만들고 있는 게시판 ERD 와 일부 QUERY 김철민 2006.11.06 3776
123 REST 관련된 내용입니다. 이전 회사분이 적어놓으셨는데 허락없이 올립니다. 댓글+2 김철민 2006.11.02 2195
122 Window 에서 Unix 명령어 쓰기 댓글+3 김철민 2006.10.29 2253
121 SmartSQL*Plus 무료 오라클 관리툴 김기웅 2006.07.06 4742
120 PDF 프린트제한 풀기... 이종철 2006.06.05 2196
119 xp 팁 모음.... 정용길 2006.05.17 2561
118 XLST를 이용한 XML 출력 권홍재 2006.05.07 2872
117 특수키 모음 이종철 2006.05.03 2273
116 xp 최적화 방법 댓글+2 이종철 2006.05.02 2756
115 proc관련 질문입니다.. 김훈 2006.04.27 2601
114 ㅜ_ㅜ 여기는 검색이 없네요.. 댓글+1 으헥! 2005.12.26 2389
113 FTP로 Windows 2003 Server에서 Unix Server로 파일 보내기 방법 갈켜주세요 댓글+1 박정길 2005.12.15 2592
112 정말 좋은 사이트네요~ 댓글+2 천국의문 2005.11.28 2477
111 [CVS]로컬 소스를 처음 등록하기(Import) 이종철 2005.11.22 2581
110 Eclipse에서 디버깅 하기 이종철 2005.11.22 2137
109 ADO.NET을 이용한...(VB.NET) 이종철 2005.11.22 1947
108 날짜 쿼리-두 달 사이의 달 가져오기 이종철 2005.11.21 1960
107 [Hint]10g에서 유효하지 않는 힌트...... 이종철 2005.11.21 1966
106 [Hint]조인 방법 변경(HASH_SJ) 이종철 2005.11.21 1987
105 엑셀 파일 읽기(JSP) 댓글+2 이종철 2005.11.18 2349
104 [JUnit]TestCase 클래스 이종철 2005.11.15 1989
103 [ANT]JAR 테스크 소개 이종철 2005.11.12 1996
102 [Hint]조인 방법 변경(HASH_AJ) 이종철 2005.11.12 2082
101 pro-c 프로그램을 pc에서 사용하는 방법을 설명해주세요 2005.11.11 1964
100 [Hint]조인 방법 변경(LEADING) 이종철 2005.11.09 2034
99 [Hint]조인 방법 변경(DRIVING_SITE) 이종철 2005.11.08 1938
98 안녕하세요? 댓글+1 최세희 2005.11.07 2821
97 [힌트]강좌가 갱신 되었습니다.. 이종철 2005.11.06 2050
96 JUnit 강좌가 시작되었습니다!! 이종철 2005.11.06 2046
95 VB.NET 강좌 갱신 이종철 2005.11.05 1929
94 [Hint]조인 방법 변경(USE_NL) 이종철 2005.11.02 2014
93 Oracle Tip 갱신...[내용무] 이종철 2005.11.02 1921
92 Eclipse와 Ant 사용하기 이종철 2005.10.31 1897
91 자바 강좌 갱신! 이종철 2005.10.30 2828
90 안녕하세요. 댓글+1 최유선 2005.10.26 2271
89 그룹핑된 테이블outer join(10g) 이종철 2005.10.26 2351
88 [힌트]STAR_TRANSFORMATION에 관해... 이종철 2005.10.26 2299
87 예전에 가입했지만 첨으로 인사드려요.. 댓글+7 안형철 2005.10.04 1944
86 가입인사드립니다. 댓글+1 이석태 2005.09.20 1984
85 가입인사~~~~ 댓글+1 서동완 2005.09.12 1881
84 가입 했습니다. 댓글+1 김무중 2005.09.12 1934
83 가입했습니당.. *^^* 댓글+1 오은영 2005.09.12 3198