일련 번호에 사용되는 열이 있습니다. 열의 값은 'WT0000004568'과 같습니다.숫자가 아닌 값을 늘리는 방법은 무엇입니까?
최대 값을 찾아 카운터 부분을 1 씩 증가시켜 새 시퀀스 번호를 만들어야합니다. 이 예제의 경우 결과 값은 'WT0000004569'입니다.
어떻게하면됩니까?
일련 번호에 사용되는 열이 있습니다. 열의 값은 'WT0000004568'과 같습니다.숫자가 아닌 값을 늘리는 방법은 무엇입니까?
최대 값을 찾아 카운터 부분을 1 씩 증가시켜 새 시퀀스 번호를 만들어야합니다. 이 예제의 경우 결과 값은 'WT0000004569'입니다.
어떻게하면됩니까?
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
질문에서 명확한 설명을하기 위해 저스틴의 대답으로 설명했습니다. 암시 적 숫자 대 문자열 변환 마스크가 양수 앞에 정사각형을 추가하기 때문에 원래의 포스터는 문자열과 숫자를 연결할 때 공백을 보았습니다. 음수와 잘 정렬되도록하십시오. 이를 방지하려면 형식 문자열의 시작 부분에 "fm"을 사용하여 숫자를 문자열로 명시 적으로 변환해야합니다. – Allan
같은 일을 할 수있는 이전 값을 찾는 하나 씩 증가 할 때 동시성 문제에 대한주의하십시오. 열에 고유 색인이 있습니까? 또한 오라클 시퀀스를 사용하여 이러한 값을 생성하는 것도 고려하십시오. – Thilo
Oracle SQL을 사용하면 Java에서 사용자 정의 함수를 작성할 수 있지만 원하는 것은 순수 SQL로 수행 할 수 있다고 생각합니다. Thilo가 위에 질문 한 것의 위에 약간의 설명 그러나 : 새로운 행이 삽입 될 때만 새로운 순서 "번호"를 할당하는 것이 제안됩니까? – hardmath
동시성 문제가 있다는 것을 알고 있지만, 지금은 걱정하지 않습니다. 이 데이터베이스는 기존 데이터베이스이므로 디자인을 변경할 수 없으므로 오라클 시퀀스는 옵션이 아닙니다. 나는 일을 일점에서 해낼 수 있었지만 문제가 생겼다. – Burferd