본문 바로가기
금융/IT | PowerBase

[Oracle] 연속키

by 디지털 전산일지 2025. 11. 1.

연속키?

PowerBase에서 거래 내역을 조회할 때 당일 거래 내역만 해도 많은 정보가 있다.

이 데이터를 한 번에 모두 출력하려고 하면 전문 길이에 제한이 있기 때문에 몇 개씩 끊어서 조회해야 한다. (한 번에 전문으로 보내고 처리할 수 있는 데이터 길이에 제한이 있기 때문)

 

몇 개씩 끊어서 조회할 때 연속키 개념을 사용한다.

예를 들어 조회 버튼을 눌렀을 때 30개씩 잘라서 조회하려면 자르는 기준이 필요하다. 이 것을 SQL로 구현한 것이 연속키 개념이다.

 

연속키의 로직

아래 TRD_INFO 테이블이 있다고 가정하자.

  거래번호(PK) 상품번호(PK) 거래일 계좌번호
29 15938 185730185 2025-11-01 1234-5678-9111
30 15939 185730183 2025-11-01 1235-5678-9111
31 15939 185730184 2025-11-01 1236-5678-9111

 


조회 버튼을 눌렀을 때 30개씩만 추가적으로 출력이 되도록 하고 싶다.

처음 조회 버튼을 눌렀을 때 1~30 번째 줄을 출력하고, 그 다음 조회 버튼을 눌렀을 때 31~60번째 줄을 추가로 밑에 출력해주고, ...

 

코드 상에서 이미 30개만 가져오는 것은 구현이 되었다고 가정할 때, SQL문을 짜는 것이다. 로직의 핵심은 PK는 어떠한 경우에도 중복될 수 없다는 것이 로직의 핵심이다.

 

➀ PK(거래번호와 상품번호)의 ORDER BY(정렬) 우선순위를 정의한다. (이 글에서는 거래번호가 1순위, 상품번호가 2순위라고 가정)
➁ 거래번호가 다른 경우, 거래번호가 작은 것이 우선적으로 나온다.
➂ 거래번호가 같은 경우, 상품번호가 작은 것이 우선적으로 나온다.

 

 

구현

/* PK : 거래번호, 상품번호 */
SELECT *
FROM TRD_INFO t
WHERE
	   (t.거래번호 < :input_trd_no)
	OR (t.거래번호 = :input_trd_no AND t.상품번호 < :input_product_no)
ORDER BY t.거래번호, t.상품번호;

 

그런데, 거래번호와 상품번호로 정렬하는 경우, 거래번호와 상품번호 문자열을 합친 값을 순서대로 ORDER BY 해도 같은 결과가 나올 것이다.

/* PK : 거래번호, 상품번호 */
SELECT 거래번호,
	   상품번호,
       거래일,
       계좌번호,
       거래번호 || 상품번호 AS CON_KEY
FROM TRD_INFO t
WHERE
	   (CON_KEY < :input_trd_no)
ORDER BY 거래번호 || 상품번호;