2011-07-17 5 views
2

일련 번호에 사용되는 열이 있습니다. 열의 값은 'WT0000004568'과 같습니다.숫자가 아닌 값을 늘리는 방법은 무엇입니까?

최대 값을 찾아 카운터 부분을 1 씩 증가시켜 새 시퀀스 번호를 만들어야합니다. 이 예제의 경우 결과 값은 'WT0000004569'입니다.

어떻게하면됩니까?

+3

같은 일을 할 수있는 이전 값을 찾는 하나 씩 증가 할 때 동시성 문제에 대한주의하십시오. 열에 고유 색인이 있습니까? 또한 오라클 시퀀스를 사용하여 이러한 값을 생성하는 것도 고려하십시오. – Thilo

+0

Oracle SQL을 사용하면 Java에서 사용자 정의 함수를 작성할 수 있지만 원하는 것은 순수 SQL로 수행 할 수 있다고 생각합니다. Thilo가 위에 질문 한 것의 위에 약간의 설명 그러나 : 새로운 행이 삽입 될 때만 새로운 순서 "번호"를 할당하는 것이 제안됩니까? – hardmath

+0

동시성 문제가 있다는 것을 알고 있지만, 지금은 걱정하지 않습니다. 이 데이터베이스는 기존 데이터베이스이므로 디자인을 변경할 수 없으므로 오라클 시퀀스는 옵션이 아닙니다. 나는 일을 일점에서 해낼 수 있었지만 문제가 생겼다. – Burferd

답변

5

Thilio가 지적했듯이 이것은 일반적으로 성능과 동시성 문제 모두에서 좋지 않은 디자인입니다. 우리는 당신이 단일 사용자 시스템이 성능에 대해 특히 관심을하지 않은 것으로 가정하면, 당신은

SQL> ed 
Wrote file afiedt.buf 

    1 select 'WT' || 
    2   to_char(
    3   to_number(substr('WT0000004568',3)) + 1, 
    4   'fm0000000000') 
    5* from dual 
SQL>/

'WT'||TO_CHAR 
------------- 
WT0000004569 
+1

질문에서 명확한 설명을하기 위해 저스틴의 대답으로 설명했습니다. 암시 적 숫자 대 문자열 변환 마스크가 양수 앞에 정사각형을 추가하기 때문에 원래의 포스터는 문자열과 숫자를 연결할 때 공백을 보았습니다. 음수와 잘 정렬되도록하십시오. 이를 방지하려면 형식 문자열의 시작 부분에 "fm"을 사용하여 숫자를 문자열로 명시 적으로 변환해야합니다. – Allan

관련 문제