infection...
Oracel Pageing 방법론 본문
기존에 전통적으로 쓰는 방법으로 rownum 을 구해서 페이징 처리를 했다.
문제는 이 방법을 쓸경우 별도로 페이징 계산까지 해와야 하는 불편함 이 발생
SELECT PROD_CD,PROD_NM,CATEGORY_CD,VEN_NM,VEN_CD,STANDARD_CONTENT,PROD_SELL_CD FROM ( SELECT ROWNUM AS RNUM,PROD_CD,PROD_NM,CATEGORY_CD,VEN_CD,VEN_NM,STANDARD_CONTENT,PROD_SELL_CD FROM( SELECT A.PROD_CD,A.PROD_NM,A.CATEGORY_CD,A.VEN_CD,A.STANDARD_CONTENT,C.VEN_NM,D.PROD_SELL_CD FROM TSC_PROD_MST A , (SELECT CATEGORY_CD FROM TSC_CATEGORY_MST WHERE LEVEL = 3 START WITH UP_CATEGORY_CD='67' CONNECT BY PRIOR CATEGORY_CD = UP_CATEGORY_CD ) B , TSC_VEN_MST C , TSC_PROD_SELL_MST D WHERE A.USE_YN='Y' and A.VEN_CD = C.VEN_CD AND A.CATEGORY_CD = B.CATEGORY_CD AND A.PROD_CD = D.PROD_CD ORDER BY A.PROD_CD DESC ) )WHERE RNUM BETWEEN 1 AND 20oracle 10g이상은 oracle hint 를 이용해서 편하게 구해올수있다.
SELECT PROD_CD,PROD_NM,CATEGORY_CD,VEN_NM,VEN_CD,STANDARD_CONTENT,PROD_SELL_CD,PAGE,PAGECOUNT,ROWSCOUNT FROM ( SELECT ROWNUM AS RNUM,PROD_CD,PROD_NM,CATEGORY_CD,VEN_CD,VEN_NM,STANDARD_CONTENT,PROD_SELL_CD ,CEIL(COUNT(1) OVER() / 20) PAGECOUNT ,CEIL(rownum/20) AS PAGE ,CEIL(COUNT(1) OVER()) ROWSCOUNT FROM( SELECT A.PROD_CD,A.PROD_NM,A.CATEGORY_CD,A.VEN_CD,A.STANDARD_CONTENT,C.VEN_NM,D.PROD_SELL_CD FROM TSC_PROD_MST A , (SELECT CATEGORY_CD FROM TSC_CATEGORY_MST WHERE LEVEL = 3 START WITH UP_CATEGORY_CD='67' CONNECT BY PRIOR CATEGORY_CD = UP_CATEGORY_CD ) B , TSC_VEN_MST C , TSC_PROD_SELL_MST D WHERE A.USE_YN='Y' and A.VEN_CD = C.VEN_CD AND A.CATEGORY_CD = B.CATEGORY_CD AND A.PROD_CD = D.PROD_CD ORDER BY A.PROD_CD DESC ) )WHERE PAGE=1
'Develop > DATABASE' 카테고리의 다른 글
oracle 에서 여러 row를 한컬럼에 출력 (0) | 2015.02.24 |
---|---|
64진수 -> 10진수 펑션 (0) | 2014.12.09 |
oracle 10진수->64진수 변환 펑션 (0) | 2014.12.09 |
mysql 사용자 등록 및 권한 설정(grant) (0) | 2014.11.03 |