키 채번 문의 0 1 4,778

by DISTINCT [SQL Query] [2024.08.05 09:53:10]


안녕하세요. 오라클에서 키 코드를 자동생성 할려고 하는데 이게 select 로 잘 안나오네요 ㅠㅠ 

일단 자동생성할려는 키값의 기본 구조는 A01-01 입니다. 

새로운 값이 저장 되면 A01 , A02 가 +1 씩 앞에 증가하고 만약 A01이 이미  들어가 있는 상태에서 다시 A01을 저장하게 되면 

뒤에 01에 +1을 해서 +02 를 붙여 줍니다. 그러면 A01-02 가 저장 되겠죠 

 

예를들어 테이블에 데이터가 비어있는 상태에서  5개의 데이터 (  AA,BB,CC,DD,EE) 를 넣는다 하면 

키값 AA, BB,CC,DD,EE 가 저장되면서 

A01-01,A02-01,A03-01,A04-01,A05-01

라고 이런식으로 5개 생성이 되면 됩니다. 

 

이렇게 데이터가 들어가 있는상태에서 다시 

( FF , GG ,HH ,AA ,II) 이렇게 AA가 중복되게 5개 저장하면 키값이 

A06-01,A07-01,A08-01,A01-02,A09-01 

이런식으로 중복 데이터 처리하고 채번되는 키값을 생성하는 건데....

이부분이 좀 어렵네요... ㅠㅠ

 

by 마농 [2024.08.07 15:10:25]
WITH t AS
(
-- 원본 --
SELECT 'AA' cd, 'A01-01' seq FROM dual
UNION ALL SELECT 'BB', 'A02-01' FROM dual
)
SELECT NVL( SUBSTR(b.seq, 1, 4) || LPAD(SUBSTR(b.seq, 5, 2) + 1, 2, '0')
          , 'A' || LPAD(NVL(SUBSTR(a.seq, 2, 2) + 1, 1), 2, '0') || '-01'
          ) new_seq
  FROM (SELECT MAX(seq) seq FROM t) a
     , (SELECT MAX(seq) seq FROM t WHERE cd = 'AA') b  -- 있던 거 추가
--   , (SELECT MAX(seq) seq FROM t WHERE cd = 'CC') b  -- 없는 거 추가
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입