오라클

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;

 

'오라클' 카테고리의 다른 글

[PL/SQL] 구구단 예제  (1) 2024.07.23
[PL/SQL] 기본 구조  (4) 2024.07.22
테이블 복사, 삭제  (0) 2024.07.19
데이터 자동 생성  (0) 2024.07.19
테이블 join  (0) 2024.07.15