Oracle 자동증가(Create sequence) NEXTVAL 과 CURRVAL
페이지 정보
본문
Sequence란
유일한 값을 순차적이면서 연속적으로 만들어주기 위해서 사용되는 객체
Sequence기능?
1. 자동적으로 유일번호 생성
2. 공유가능하고 독립된 객체(여러 table에 사용 가능)
3. 주로 기본키값을 생성하기 위해 사용
4. 메모리에 캐쉬되면 시퀀스 값을 액세스하는 효율성을 향상시킴
장점 : 메모리에서 시퀀스 값을 캐쉬하면 이값에 대해 더 빠른 액세스를 할수 있습니다.
단점 : 시퀀스 값들이 순차적으로 안들어간다. 예를들어 1,2,3,5,7과 값이 gap(간격)이 생긴다
시퀀스에 gap이 생기는경우
1. rollback발생
2. system실패
3. 시퀀스가 다른 테이블에서 사용될때
다른 DBMS와의 차이
mysql(auto_increment)에서나 mssql(identity)에서는 해당 int형 컬럼에 순차적으로 자동으로 값(일련번호)이 부여해주는 기능이 있습니다.
이값은 1,2,3,4,순으로 순차적으로 자동으로 dbms가 계산하여 출력시켜주는데 게시판이나 primary key에 보통 많이 넣어 순서번호로 사용합니다.
oracle에서도 이런 자동 증가 번호 기능이 있습니다. 이기능을 SEQUENCE 라고 합니다.
먼저 SEQUENCE 을 사용하기 위해서는 SEQUENCE를 선언하고 사용하면 됩니다.
물론 하나의 게시판에 하나의 SEQUENCE을 사용하므로 사용할 갯수만큼 SEQUENCE을 만들어야 합니다.
SEQUENCE 선언하기
문법
CREATE SEQUENCE 시퀀스이름 START WITH 1 INCREMENT BY 증가숫자 MAXVALUE 최대값 nocycle cache 20;
- 시퀀스이름 SEQUENCE명입니다. START WITH는 시작 번호 INCREMENT는 증가 번호입니다.
- MAXVALUE는 최대 시퀀스 값입니다. 최대값까지 가면 처리가 안되고 에러가 납니다.
- MAXVALUE는 생략시 10의 27승까지 가능하다.
- cycle는 최대값까지 간다음에 다시 start with부터 시작하지만 nocycle는 최대값을 간후에 멈춘다.
- cache는 메모리에 캐쉬하여 사용한다. nocache는 메모리에 캐쉬하여 사용안한다.
Classic ASP 에서의 사용예
<%
strSql = "INSERT INTO aaa (IDX, COMPANY, TEL) "
strSql = strSql & " VALUES ( SEQUENCE_aaa.NEXTVAL , '" & COMPANY & "' , '" & TEL& "' ) "
conn.Execute(strSql)
%>
관련자료
http://annehouse.tistory.com/163
http://blog.naver.com/jjongs23/70058682016
http://www.zetswing.com/bbs/board.php?bo_table=ORACLE_TIP&wr_id=30
http://gilnet.tistory.com/entry/Sequences-NextVal과-Currval
http://lachesis76.egloos.com/viewer/400806
유일한 값을 순차적이면서 연속적으로 만들어주기 위해서 사용되는 객체
Sequence기능?
1. 자동적으로 유일번호 생성
2. 공유가능하고 독립된 객체(여러 table에 사용 가능)
3. 주로 기본키값을 생성하기 위해 사용
4. 메모리에 캐쉬되면 시퀀스 값을 액세스하는 효율성을 향상시킴
장점 : 메모리에서 시퀀스 값을 캐쉬하면 이값에 대해 더 빠른 액세스를 할수 있습니다.
단점 : 시퀀스 값들이 순차적으로 안들어간다. 예를들어 1,2,3,5,7과 값이 gap(간격)이 생긴다
시퀀스에 gap이 생기는경우
1. rollback발생
2. system실패
3. 시퀀스가 다른 테이블에서 사용될때
다른 DBMS와의 차이
mysql(auto_increment)에서나 mssql(identity)에서는 해당 int형 컬럼에 순차적으로 자동으로 값(일련번호)이 부여해주는 기능이 있습니다.
이값은 1,2,3,4,순으로 순차적으로 자동으로 dbms가 계산하여 출력시켜주는데 게시판이나 primary key에 보통 많이 넣어 순서번호로 사용합니다.
oracle에서도 이런 자동 증가 번호 기능이 있습니다. 이기능을 SEQUENCE 라고 합니다.
먼저 SEQUENCE 을 사용하기 위해서는 SEQUENCE를 선언하고 사용하면 됩니다.
물론 하나의 게시판에 하나의 SEQUENCE을 사용하므로 사용할 갯수만큼 SEQUENCE을 만들어야 합니다.
SEQUENCE 선언하기
문법
CREATE SEQUENCE 시퀀스이름 START WITH 1 INCREMENT BY 증가숫자 MAXVALUE 최대값 nocycle cache 20;
- 시퀀스이름 SEQUENCE명입니다. START WITH는 시작 번호 INCREMENT는 증가 번호입니다.
- MAXVALUE는 최대 시퀀스 값입니다. 최대값까지 가면 처리가 안되고 에러가 납니다.
- MAXVALUE는 생략시 10의 27승까지 가능하다.
- cycle는 최대값까지 간다음에 다시 start with부터 시작하지만 nocycle는 최대값을 간후에 멈춘다.
- cache는 메모리에 캐쉬하여 사용한다. nocache는 메모리에 캐쉬하여 사용안한다.
Classic ASP 에서의 사용예
<%
strSql = "INSERT INTO aaa (IDX, COMPANY, TEL) "
strSql = strSql & " VALUES ( SEQUENCE_aaa.NEXTVAL , '" & COMPANY & "' , '" & TEL& "' ) "
conn.Execute(strSql)
%>
관련자료
http://annehouse.tistory.com/163
http://blog.naver.com/jjongs23/70058682016
http://www.zetswing.com/bbs/board.php?bo_table=ORACLE_TIP&wr_id=30
http://gilnet.tistory.com/entry/Sequences-NextVal과-Currval
http://lachesis76.egloos.com/viewer/400806
댓글목록
등록된 댓글이 없습니다.