그리고 테이블에 동시에 여러 곳에서 입력이 빈번하게 일어난다고 한다. 입력시 키값이 듀플리케이션이 발생한다고 한다.
1. MS SQL 시퀀스 만들기
①. Create a sequence table
CREATE TABLE SEQ_TAB ( seq_name VARCHAR(64) PRIMARY KEY, cyclic_yn CHAR(1) NOT NULL, seq_value INT NOT NULL )
②. Create a procedure to get sequence number
---------------------------------------------- -- 시퀀스 갖고 오는 프로시저 -- 작업성공이면 0보다 큰 수, 실패면 음수 반환 ---------------------------------------------- create procedure sp_get_nextval @p_seq_name varchar(100), @v_seq_value int output as begin declare @v_cyclic_yn char(1)
set @v_seq_value = -1
begin transaction trans1
select @v_cyclic_yn = cyclic_yn from seq_tab where seq_name = @p_seq_name
if (@@rowcount = 0) return @v_seq_value -- 찾는 자료 없음 else begin update seq_tab set @v_seq_value = seq_value = seq_value + 1 where seq_name = @p_seq_name
-- 시퀀스가 순환이고, 현재 값이 int의 최대 값이면 0으로 되돌린다. if (@v_seq_value = 2147483647) and (@v_cyclic_yn = 'y') begin update seq_tab set seq_value = 0 where seq_name = @p_seq_name end
commit transaction trans1 end
return @v_seq_value end
1. 시간값으로
시간값으로 천분의 일초까지 지정 한후 별도의 sequence 테이블을 생성 201203270900000 + 0000 네자리를 추가한다.
set CLASSPATH=%WEBLOGIC_CLASSPATH%;%POINTBASE_CLASSPATH%;%JAVA_HOME%\jre\lib\rt.jar;%WL_HOME%\server\lib\webservices.jar;%WL_HOME%\server\lib\tdgssjava.jar;%WL_HOME%\server\lib\terajdbc4.jar;%CLASSPATH%