티스토리 뷰

일련번호를 'K0001' 'K0002' 이런식으로 증가시켜야한다는 요청을 받고 고민에 빠졌다.

시퀀스 권한도 없어서 JAVA 혹은 SQL로만 해결해야하는데,

SELECT해서 자바에서 처리를 하다보면 여러 사람이 동시에 작업할 경우 일련번호가 겹칠 수 있다고 생각했다.

쿼리로 MAX(SEQ) + 1을 해도 겹칠 수 있지 않을까 생각하지만 주어진 상황에선 최선이지 않나 생각했다.

1
SELECT NVL2(MAX(SEQ_NO), 'K'||LPAD(REPLACE(MAX(SEQ_NO), 'K'+ 17'0'), 'K0001'FROM TEST;

NVL2로 처음 값이 없을 경우(NULL) 'K0001'로 지정되도록 했다.

MAX(SEQ_NO)를 통해 현재 중 가장 큰 일련번호를 가져온다.

REPLACE로 문자인 'K'를 제외시키고 +1을 해준다.

+1을 해줄 경우 2라는 값이 나오게 되니, LPAD로 앞쪽에 사라진 0을 채워주고 기존의 'K'를 붙여준다.

결과는 잘 나오지만, 효율성에 대해서는 의문이다.

게다가 여러명이 동시에 작업하면 꼬일거 같은 느낌이 든다...

댓글