다연이네

[days13] Sequence(시퀀스) 본문

Oracle

[days13] Sequence(시퀀스)

 다연  2020. 11. 16. 22:26
반응형

시퀀스 (일련번호를 부여하는 테이블)

== 은행의 번호표 기기 
- 시퀀스란 기존의 테이블에 대해 기본키나 유니크 키를 사용하여 부가하는 일종의 새로운 컬럼처럼 사용할 수 있는 일련번호를 매김하기 위한 하나의 컬럼으로 구성된 테이블과 같다.
- 시퀀스라는 객체 스스로만 사용할 의미가 없으며, 기존의 테이블과 연계해서 사용하게 된다.

 

【형식】
CREATE SEQUENCE 시퀀스명
[ INCREMENT BY 정수] 증가치
[ START WITH 정수] 시작값
[ MAXVALUE n ? NOMAXVALUE] 100
[ MINVALUE n ? NOMINVALUE] 1 --start with값과 minvalue의 차이 ? dept50 추가시 최소10부터 시작하지만 50부터 뽑아야 한다 (50:start with / 10:minvalue)
[ CYCLE ? NOCYCLE] 
[ CACHE n ? NOCACHE];

 

 

1. 시퀀스 생성

create sequence seq_dept
increment by 10
start with 50
nocache;

--10씩 증가하는 시퀀스, 50부터 시작

2. 시퀀스 삭제

drop sequence seq_dept;

3. 시퀀스 목록 확인

select *
from user_Sequences
where sequence_name like 'SEQ_DE%';

4. currval, nextval

 

해당 시퀀스의 값을 증가시키고 싶다면 testSeq.NEXTVAL

 

현재 시퀀스를 알고 싶다면 testSeq.CURRVAL

 

currval 사용하기 전에 nextval이 있어야 한다. => 순서 : nextval -> currval

 INSERT INTO dept(deptno,dname,loc)
  VALUES(seq_dept.NEXTVAL,'DEVELOP','COREA'); --nextval : 다음 번호표를 하나 뽑겠다는 의미
  
  select seq_dept.currval
from dual;

 

 

활용 예

- 설문조사 테이블에 새로운 질문 (이번주 비대면 수업 찬성 ?  예/아니오/기권 )이 들어가질때 자동 순번 매기기
--각각 survey, list 테이블에 시퀀스 2개 만들어야 한다

create sequence seq_tbl_survey
increment by 1
start with 3 
nocache;

create sequence seq_tbl_list
increment by 1
start with 8
nocache;

insert into tbl_survey values
(seq_tbl_survey.nextval, 'kim', '이번주 비대면 수업 찬성 ?', 0, sysdate, sysdate+1, sysdate+2, '시작전');
    
    insert into tbl_list values(seq_tbl_list.nextval, seq_tbl_survey.currval, '예', 0);
    insert into tbl_list values(seq_tbl_list.nextval, seq_tbl_survey.currval, '아니오', 0);
    insert into tbl_list values(seq_tbl_list.nextval, seq_tbl_survey.currval, '기권', 0);

 

반응형

'Oracle' 카테고리의 다른 글

[days14] PL/SQL 예제  (0) 2020.11.17
[days13] PL/SQL, 익명 프로시저  (0) 2020.11.16
[days12] View  (2) 2020.11.13
[days10] 데이터베이스 모델링  (0) 2020.11.11
[days10] join 사용하기 + SELF JOIN  (0) 2020.11.11
Comments