MS SQL sequence 만들기

2012. 3. 27. 09:27 from DB

 

ORACLE에는 sequence가 있듯,

MS SQL에는 자동증가로  IDENTITY가 있다. 하지만 칼럼타입이 int 같은 정수여야만 사용가능하다...

 

문제는 시퀀스 칼럼타입이 INT가 아니고 varchar타입이다.

(컬럼타입을 바꿔서 해결하면 좋겟지만 현실은 냉정하듯 해당컬럼의 타입을 바꿀수 없는 상황이다.)

그리고 테이블에 동시에 여러 곳에서 입력이 빈번하게 일어난다고 한다. 입력시 키값이 듀플리케이션이 발생한다고 한다.  

 

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  네자리를 추가한다.

 


 

'DB' 카테고리의 다른 글

sysdate  (0) 2013.07.19
JDBC FailOver  (0) 2012.07.30
DB2 rownum - oracle  (0) 2011.09.14
테라DB 관련 정보  (0) 2011.09.14
MSSQL TCP/IP 설정  (0) 2011.09.14
Posted by 에시드 :

정규식 : 특정단어 제외

2012. 3. 1. 21:46 from script

 

[ ] ( ) - + ` _ 제외한 모든 특수문자 검출  

 var regex=/[^\[\]\(\)\-\+\`_ㄱ-힣a-zA-Z0-9]/

 

 

[^abc] 는 a,b,c 는 3요.


약 abc 요?


replace.(/abc/g, '');


/abc 속/; 다.


\w(?=abc) 면 abc 는 \w

요.

 

-------------------------------------------------------------------------------------

\b([^a\s]|a+b[^ac\s])+\b

이 패턴은 완전하지는 않지만 상당히 가깝습니다.

 

아이디어는 있는데 정규식에 익숙하지 않아서 구현이 잘 안됩니다.

 

([a를 포함하지 않은 문자] | a+bb | a+[a,b를 포함하지않은 문자])+ 를 해주면

a+ 로 끝나거나 a+b로 끝나는 단어가 빠집니다. 이를 더 추가해주면 될것 같은데

의도하는 대로 되지가 않네요.

 

위에서 정규식을 설명하면 이렇습니다.

 

만약 a를 포함하지 않은 경우에는 처음 a를 포함하지 않은 문자들의 조합으로

해결이 됩니다.

 

a를 포함한 경우를 봅니다. 다시 다른 글자들과 이어질려면 abb꼴이면 됩니다.

이것도 a+bb에 의해서 해결이 됩니다.

 

a를 포함하지만 b가 이어 나오지 않는 다면 문제가 되지 않습니다.

이것도 a+[a,b를 포함하지 않는 문자]에 의해서 해결이 됩니다. [앞부분]

 

문제는 a+로 끝나거나 a+b로 끝나는 것이 빠진다는 점입니다. [뒷부분]

그래서 (앞부분|앞부분 뒷부분|뒷부분) 과 같은 꼴이면 되겠습니다.

 

문제는 이러한 것을 정규식으로 표현해 볼려고 해도 제대로 표현이

안된다는 점입니다.


'script' 카테고리의 다른 글

decodeXSS  (0) 2012.10.04
fileupload  (0) 2012.07.06
undefined, null, typeof  (0) 2012.01.11
offsetHeight, clientHeight, scrollHeight  (0) 2011.09.19
자바스크립트 챠트 이미지  (0) 2011.09.19
Posted by 에시드 :

Java에서 IP주소를 가져오는 방법은 매우 쉽고 간단합니다. 일반적으로 사용되는 간단한 방법으로는 다음과 같은 방법이 있습니다.


위의 단 한줄로 현재 시스템의 IP를 읽어올 수 있습니다.
그런데 개발시에는 문제가 없었는데 리눅스 서버에서 구동해 보니 127.0.0.1과 같이 loopback 주소가 나오는 경우가 있더군요.
찾아보다 다음과 같은 방법으로 깔끔하게 해결할 수 있었습니다.

 
 
현재 시스템의 모든 네트워크 인터페이스를 읽어와서 loopback장치인지 랜선에 연결된 장치인지 여부를 확인하여 실제 사용중인 인터페이스의 IP주소를 읽어오게 됩니다. 위와 같이 사용해서 실무에 적용해본 결과 어느 OS, 장치에 상관없이 IP가 정상적으로 출력되는것을 확인하였습니다.

소스코드가 좀 길고 더럽네요; 그냥 보관용으로 적어두는데 의미를 부여하겠습니다;;


사례) ftp 프로그램으로 로그인까지는 가능하나 업로드하는데 계속된 FTP 오류 : 500 Invalid port Command  발생
업로드전 아이피,포트 지정하는 setPort() 부분에서 클라이언트 리눅스의 loopback IP주소반환하여 나타난 문제임

위의 로직으로 inetAddress.isSiteLocalAddress() 실제 사용중인 인터페이스 IP주소 반환받게 수정함

주석처리된부분이 AS-IS 소스임


upLoad 부분

  
Posted by 에시드 :