sequence.sql

성혜·2024년 2월 18일
0

Challenge

목록 보기
15/28
post-thumbnail

시퀀스, sequence

: 데이터베이스 객체 중 하나(테이블, 제약사항, 시퀀스)
: 오라클 전용 객체 (다름 DBMS 제품에는 없음 - 유사한 기능을 하는 것들이 있음)
: 일련 번호를 생성하는 객체(**)
: 주로 식별자를 만드는데 사용한다. > PK 값으로 사용한다.

시퀀스 객체 생성하기 (헝가리언 표기법)
: create sequence 시퀀스명;

시퀀스 객체 삭제하기
: drop sequence 시퀀스명;

시퀀스 객체 사용하기
: 시퀀스명.nextVal > 함수 > 호출 시 일련 번호 반환 (처음엔 1, 다음부터 2,3,4,5 ...) => 거의 대부분 이걸 사용
: 시퀀스명.currVal


  • 실습 코드
create sequence seqMemo; -- 시퀀스는 독립적이기 때문에 아까 시퀀스와 상관없이 1부터 시작

insert into tblMemo (seq, name, memo, regdate) values (seqMemo.nextVal, '홍길동', '메모', sysdate);

select * from tblMemo;

📌currVal을 잘 사용 안하는 이유
: 몇번까지 사용했는지 반환 (숫자 증가x)
: developer을 닫고 다시 들어가면
=> ORA-08002: 시퀀스 SEQNUM.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다
=> 로그인 이후로부터 최소 한번이상 nextVal를 날리고 나서 사용할 수 있다.

select seqNum.currVal from dual; -- 21


시퀀스 객체 생성하기 + 옵션

    create sequence 시퀀스명 
                    increment by n -- 증감치 (1이 기본값)
                    start with n   -- 시작값
                    maxvalue n     -- 최댓값
                    minvalue n     -- 최솟값
                    cycle          -- 순환 유무 (min,max가 있어야함 + cache10)
                    cache n;       -- 임시 저장 (동기화 텀) -오라클의 성능을 위해서 

  • 실습 코드
create sequence seqTest
                --increment by -1 -- -1부터 시작
                --start with 10 -- 10,11,12...
                --maxvalue 10
                --minvalue 1 -- 1~10까지
                --cycle --1~10까지 반복
                cache 20 -- (기본값 20)
                ;
select seqTest.nextVal from dual;

💡 디스크 I/O의 접근을 최소화하기 위해서
시퀀스를 사용할 때마다 디스크에 순차적으로 숫자가 자동 동기화 되면서 저장이 되는 데 비용이 많이 들게 됨! 하지만 저장을 안 해놓으면 오라클 서비스가 강제 종료 되었을 때 몇번 부터 시작을 해야할지 알 수 없기 때문에 임시로 저장해 두는 값이다!!

예를 들어 캐시 옵션이 20개씩 시퀀스 번호를 생성하도록 하면 한번에 1~20까지 시퀀스 번호를 생성하고 반환!
여기서 문제가 생기면 메모리에 있던 1~20 숫자가 사라지고 21부터 시작하게 됨. 다시 날라가면 41부터 시작 !

profile
하루를 정리하고 기록합니다.

0개의 댓글