관리 메뉴

오버플로

[Oracle] sequence 본문

Oracle

[Oracle] sequence

NACO 2021. 9. 30. 21:36

 sequence 

- 순차적으로 증가하는 번호를 관리하는 객체

- 레코드를 insert하는 순서대로 번호를 넣어야 할 때

- 오라클 버전에 따라 순차적인 번호를 사용하지 못할 수도 있음

    > 12c 이전에는 오라클이 종료되면 cache에 설정한 sequence 번호가 사라짐

        (8i, 9i, 10g,11g)

    > 12c 이후 부터는 insert를 실패한 경우에만 번호가 사라짐 (12c~19c)

- user_sequences data dictionary에서 생성된 시퀀스를 확인할 수 있음

 

- 시퀀스 생성) create sequence 시퀀스명

                           increment by   증가값

                           start with      시작값

                           maxvalue      끝값

                           cache         메모리에 올릴 번호 개수

                           반복여부; (cycle | nocycle)

  > 시퀀스 생성 옵션의 기재 순서는 없음

  > cache는 20이 기본, 반복여부는 nocycle(반복아님)이 기본

  > 반복이 nocycle인 경우에는 maxvalue이후에 nextval하면 error

  > 생성된 시퀀스는 사용자가 nextval로 값을 사용해야 메모리에 로드됨 (메모리에 생성된 시퀀스만 사용 가능)

 

- 값 얻기) 시퀀스명.nextval

  > 메모리에 시퀀스가 로드되지 않으면 메모리에 시퀀스를 로딩하고 다음 번호를 얻음

                   시퀀스명.currval

  > 메모리에 로드되어있는 시퀀스의 현재 번호를 얻음(메모리에 로딩은 할 수 없음)

  > 시퀀스 객체가 메모리에 로딩되어있지 않다면 error 발생 (currval을 먼저 쓰면 error)

 

- 시퀀스 삭제) drop sequence 시퀀스명;

 

- 시퀀스 사용 중 쿼리가 실패하면 해당 번호는 사라짐.

   따라서, 순차적인 번호가 모두 존재해야하는 경우에는 시퀀스 쓰지 말고 서브쿼리 쓰자!! 

 


# 오늘의 코딩 #

- 시퀀스를 사용해보자!

 

#시퀀스 생성 및 사용

---시퀀스 생성
-- 1 ~ 100 까지 1씩 증가하는 반복하지 않는 시퀀스를 생성하고
-- cp_test_emp 테이블에 시퀀스를 사용하여 아래와 같이 사원정보를 추가하자

-- 1. 김동동 2800
-- 2. 박나나 2900
-- 3. 이사랑 2801

--시퀀스 생성
create sequence test_sequence
increment by 1
start with 1
maxvalue 100
nocycle;

--값 추가
insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '김동동', 2800);

insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '박나나', 2900);

insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '이사랑', 2801);
commit;

select * from cp_test_emp;
select * from user_sequences where sequence_name='TEST_SEQUENCE';

#출력결과#

=> empno(시퀀스 사용 부분)이 insert한 순서대로 부여된 것 확인! 

=> user_sequences 딕셔너리에서 조회하면 만든 시퀀스를 조회할 수 있음

 


#시퀀스 삭제

--시퀀스 삭제
drop sequence test_sequence;

#출력결과#

=> 삭제완료!

'Oracle' 카테고리의 다른 글

[Oracle] alter  (0) 2021.09.29
[Oracle] 제약사항 (Constraint)  (0) 2021.09.28
[Oracle] union / join / driving table  (0) 2021.09.26
[Oracle] subquery / Scalar subquery / inline view  (0) 2021.09.24
[Oracle] function(함수)  (0) 2021.09.20
Comments