DataBase/SQL

sybase 페이징 기법

조심이 2008. 7. 24. 10:12
반응형

sybase 는 rownum 등을 제공하지 않아~ 페이징 처리가 까다롭다.

전에 프로젝트에서 사용하던 방법인데 스토어 프로시져를 만들고

페이징을 위한 파라메터를 넘겨주어 값을 받아오는 형태인다.

일단 임시테이블에 모든 값을 부어넣고 조인을 걸어 원하는 페이징 열만 가져오기 때문에

그닥 좋은 방법처럼 보이지는 않을 수도 있으나 더 좋은 방법이 떠오르지 않음...^^

예)

create proc 페이징(                               -- 프로시져 생성
 @Page_No  int  = NULL,                        -- 페이지 번호 변수
 @List_Rows  int  = NULL,                      -- 뽑아올 열 갯수 변수
)
as
 declare @Last_Row decimal(10,0),
 @First_Row decimal(10,0)

 create table #임시테이블 (                -- 임시 테이블 생성
   Count_No numeric(10,0) identity not null primary key,     -- 번호 생성(자동증가)
    키값   --   셀렉트 한 결과 집합의 키 컬럼
 )

 insert #임시테이블(키값)
 select 키값
 from 테이블
 where 조건......... 

 select @Last_Row = @Page_No * @List_Rows
 select @First_Row = @Last_Row - @List_Rows + 1


  select   컬럼1, 컬럼2 .....
  from 테이블 AS A,
         임시테이블 AS B
   where 조건....
             and A.키값 = B.키값                
             and B.Count_No between @First_Row and @Last_Row

반응형