티스토리 뷰
일련번호를 'K0001' 'K0002' 이런식으로 증가시켜야한다는 요청을 받고 고민에 빠졌다.
시퀀스 권한도 없어서 JAVA 혹은 SQL로만 해결해야하는데,
SELECT해서 자바에서 처리를 하다보면 여러 사람이 동시에 작업할 경우 일련번호가 겹칠 수 있다고 생각했다.
쿼리로 MAX(SEQ) + 1을 해도 겹칠 수 있지 않을까 생각하지만 주어진 상황에선 최선이지 않나 생각했다.
1
|
SELECT NVL2(MAX(SEQ_NO), 'K'||LPAD(REPLACE(MAX(SEQ_NO), 'K') + 1, 7, '0'), 'K0001') FROM TEST;
|
NVL2로 처음 값이 없을 경우(NULL) 'K0001'로 지정되도록 했다.
MAX(SEQ_NO)를 통해 현재 중 가장 큰 일련번호를 가져온다.
REPLACE로 문자인 'K'를 제외시키고 +1을 해준다.
+1을 해줄 경우 2라는 값이 나오게 되니, LPAD로 앞쪽에 사라진 0을 채워주고 기존의 'K'를 붙여준다.
결과는 잘 나오지만, 효율성에 대해서는 의문이다.
게다가 여러명이 동시에 작업하면 꼬일거 같은 느낌이 든다...
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 124 나라의 숫자
- 객체지향과 디자인패턴
- 다음 맵 api
- 기능개발
- Spring
- 카카오인턴
- 맵 api
- 더 나은 내일
- 타겟 넘버
- codility
- 문자열 내 마음대로 정렬하기
- cgv
- FrogJmp
- 예매 알림
- 안드로이드 스튜디오
- K번째수
- 쇠막대기
- 파이팅코리아
- 텔레그램
- 노션트렐로광고X
- json
- 프로그래머스
- API
- 최솟값
- 자바
- java
- 완주하지 못한 선수
- AWS
- 알고리즘
- 스프링 부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함