오라클
sequence
chantleman
2024. 7. 22. 14:19
시퀀스는 자동으로 번호를 생성하기 위해 사용됩니다.
기본키를 설정할 후보키가 없거나 pk를 특별히 의미있게 만들지 않아도 되는 경우,
혹은 자동으로 순서적인 번호가 필요한 경우 사용합니다.
create sequence sequence_name
[start with n]
[increment by n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[cycle | nocycle]
[cache n | nocache]
[order | noorder]
start with n
시작값 설정, 기본은 min_value
increment by n
자동 증감값 기본은 1, 음수 사용가능
cache n
메모리에 미리 할당할 값. 기본은 cache 20
increment by 가 음수로 지정되면 내림차순의 시퀀스가 되면서 nomaxvalue는 -1로,
nominvalue는 -10^27이 됨
start with도 min_value가 아닌 max_value로 설정됨
create sequence lprod_seq
increment by 1
start with 15;
insert into lprod(lprod_id, lprod_gu, lprod_nm)
values(lprod_seq.nextval, 'P203','아동복');
lprod_id를 lprod_sqe 값으로 지정했습니다.
시퀀스를 15부터 하라고 지정해줬기때문에
lprod테이블을 select를 해보면
새로 삽입된 데이터 lprod_id가 15인 것을 확인할 수 있습니다.
currval
현재 번호 출력시키기
select lprod_seq.currval from dual;
출력결과) 15
nextval
다음 번호로 증가시키기
select lprod_seq.nextval from dual;
출력결과) 16
currval은 해당 세션에서 nextval이 최소한 한번 이상 호출됐을 때만 사용가능합니다.
create sequence cart_seq
increment by 1
minvalue 1
maxvalue 30
cycle;
cycle속성을 넣어서 30이 넘어가면 다시 1로 되돌아오게 해봤습니다.
select cart_seq.nextval from dual;
위 코드를 31번 실행하면 30에서 1번으로 되돌아간 것을 확인할 수 있습니다.
시퀀스 삭제할 때는 drop쓰면 됩니다.
drop sequence lprod_seq;
drop sequence cart_seq;
728x90