ORACLE - 시퀀스(SEQUENCE)

안정민·2022년 4월 17일
0

ORACLE

목록 보기
10/10

연속적인 숫자 값을 자동으로 증감 시켜서 값을
리턴하는 객체

테이블을 생성할 때 숫자에 primary key를 부여할 때가 많은데, (글번호, 상품번호, 등록번호 ...) 이 숫자 값들에 자동으로 번호를 부여할 수 있는 객체

형식

SQL>CREATE SEQUENCE 시퀀스명
 INCREMENT BY 한번에 증감할 양(DEFAULT : +1)
 START WITH 시작값 (DEFAULT: 0 )
 cache 여부

시퀀스 함수

  • 컴퓨터나 세션을 껐다 키거나 재접속을 해도 유지됨

NEXTVAL : Next Value, 다음 값을 얻어옴

SQL> CREATE SEQUENCE test_seq;
시퀀스가 생성되었습니다.
SQL>SELECT test_seq.NEXTVAL FROM DUAL;

--> 이 함수가 숫자 하나를 반환 (실행할 때마다 증가된 값 반환)

CURRVAL : Current Value, 현재 값을 얻어옴

SQL>SELECT test_seq.CURRVAL FROM DUAL;

  • 시퀀스 : SQL> DESC USER_SEQUENCES 에서 관리가 됨

SQL> SELECT sequence_name, last_number FROM user_sequences;

여기서 숫자를 21까지 반환하지 않았는데 21인 이유
-DB입장에서는 숫자를 알아서 계산하고 반환하는 작업이 무겁기 때문에 시퀀스를 미리 20개 정도 반환해서 가지고 있다가 하나씩 가져다 줌 !

ex) 멤버테이블에서 사용할 시퀀스 만들기

SQL> CREATE SEQUENCE MEMBER_SEQ;

시퀀스가 생성되었습니다.

테이블에 숫자값 넣을 때 숫자 대신 시퀀스 NEXTVAL로 넣기

SQL> INSERT INTO member
  2  (num, name, addr)
  3  VALUES( member_seq.NEXTVAL, '김구라', '노량진');

똑같이 계속 추가하면

SQL> select * from member;

이렇게 자동으로 숫자가 뜸 !

  • 한 번 지나간 시퀀스의 값은 되돌릴 수 없음
    ( 3 삭제하고 또 추가하면 3이 아니라 4가 추가됨 )
    , 시퀀스는 수정 불가능 !

시퀀스에 옵션 주기 (디폴트값 : 시작 1, 증가 1)

SQL> CREATE SEQUENCE TEST_SEQ
  2  START WITH 10    --> 시작값 지정
  3  INCREMENT BY 10;    --> 증가값 지정

0개의 댓글