연속키?
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 거래번호 || 상품번호;