[오라클] 시퀀스

심심이·2024년 2월 29일
0

oracle

목록 보기
39/40
       -------- **** ==== 시퀀스(sequence) ===== **** ----------
           
   -- 시퀀스(sequence)란? 쉽게 생각하면 은행에서 발급해주는 대기번호표 와 비슷한 것이다.
   -- 시퀀스(sequence)는 숫자로 이루어져 있으며 매번 정해진 증가치 만큼 숫자가 증가되어지는 것이다.    
   
   /*
     create sequence seq_yeyakno   -- seq_yeyakno 은 시퀀스(sequence) 이름이다.
     start with 1    -- 첫번째 출발은 1 부터 한다.
     increment by 1  -- 증가치 값    2 3 4 5 ......
     maxvalue 5      -- 최대값이 5 이다.
  -- nomaxvalue      -- 최대값이 없는 무제한. 계속 증가시키겠다는 말이다.
     minvalue 2      -- 최소값이 2 이다. cycle 이 있을때만 minvalue 에 주어진 값이 사용된다. 
                     --                nocycle 일 경우에는 minvalue 에 주어진 값이 사용되지 않는다.
                     -- minvalue 숫자 에 해당하는 숫자 값은 start with 숫자 에 해당하는 숫자 값과 같든지 
                     -- 아니면 start with 숫자 에 해당하는 숫자보다 작아야 한다.
                     
  -- nominvalue      -- 최소값이 없다.   
     cycle           -- 반복을 한다.
  -- nocycle         -- 반복이 없는 직진.
     nocache;
  */

-- nomaxvalue nominvalue 많이 사용함.
-- 그리고 nocycle         -- 반복이 없는 직진. 많이 사용


create sequence seq_yeyakno_1 --seq_yeyakno_1 은 시퀀스(sequence) 이름이다.
start with 1 -- 첫번째 출발은 1부터 한다.
increment by 1 -- 증가치는 이다. 즉 1씩 증가한다. 값 2 3 4 5 (increment:증가) -- 만약 2라면 3 5 7 9 ..
maxvalue 5 -- 최대값이 5이다.
minvalue 2 -- 최소값이 2 이다.
cycle      -- 반복한다.
nocache;

/*

    오류 보고 -
    ORA-04006: START WITH 에 MINVALUE 보다 작은 값은 지정할 수 없습니다
    
    -- minvalue 숫자 에 해당하는 숫자 값은 start with 숫자 에 해당하는 숫자 값과 같든지 
    -- 아니면 start with 숫자 에 해당하는 숫자보다 작아야 한다.

*/




create sequence seq_yeyakno_1 --seq_yeyakno_1 은 시퀀스(sequence) 이름이다.
start with 2 -- 첫번째 출발은 2부터 한다.
increment by 1 -- 증가치는 이다. 즉 1씩 증가한다. 값 2 3 4 5 (increment:증가) -- 만약 2라면 3 5 7 9 ..
maxvalue 5 -- 최대값이 5이다.
minvalue 1 -- 최소값이 1 이다.
cycle      -- 반복한다.
nocache;

-- Sequence SEQ_YEYAKNO_1이(가) 생성되었습니다.




---- **** 생성되어진 시퀀스(sequence)를 조회해 봅니다. **** ----

select *
from user_sequences;
-- 'SEQ_YEYAKNO_1' 가 내가 만든 시퀀스이다. 

select *
from user_sequences
where sequence_name = 'SEQ_YEYAKNO_1';

select last_number  -- 다음번에 들어올 시퀀스 값을 미리 알려주는 것이다. 
from user_sequences
where sequence_name = 'SEQ_YEYAKNO_1';

create table tbl_board_test_1
  (boardno        number
  ,subject        varchar2(100)
  ,registerdate   date default sysdate
  );
  -- Table TBL_BOARD_TEST_1이(가) 생성되었습니다.


insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '첫번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 start 값이 2 이었다.

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '두번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '세번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '네번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.
-- seq_yeyakno_1 시퀀스의 maxvalue 값이 5 이었고, cycle 이었다. 즉, 반복을 한다. 

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '다섯번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 minvalue 값이 1 이었고, cycle(반복) 이었으므로
-- maxvalue 값이 사용되어진 다음에 들어오는 시퀀스 값은 minvalue 값인 1 이 들어온다.
-- maxvalue 값까지 가고 나서는 minvalue 값부터 시작한다는 뜻이다.

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '여섯번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.

insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '일곱번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.

commit;
-- 커밋 완료


select *
from tbl_board_test_1;

/*
      seq_yeyakno_1 시퀀스값의 사용은 
      2(start)  3  4  5(maxvalue) 1(minvalue) 2 3 4 5(maxvalue) 1(minvalue) 2 3 4 5 1 2 3 ...... 
      와 같이 사용된다.
  */



create sequence seq_yeyakno_2
start with 1    -- 첫번째 출발은 1 부터 한다. 
increment by 1  -- 증가치는 1 이다. 즉, 1씩 증가한다. 
nomaxvalue      -- 최대값은 없는 무제한. 계속 증가시키겠다는 말이다. 
nominvalue      -- 최소값이 없다.
nocycle         -- 반복을 안한다.
nocache; 
-- Sequence SEQ_YEYAKNO_2이(가) 생성되었습니다.


create sequence seq_yeyakno_3;
--Sequence SEQ_YEYAKNO_3이(가) 생성되었습니다.

---- **** 생성되어진 시퀀스(sequence)를 조회해 봅니다. **** ----
select *
from user_sequences
where sequence_name in('SEQ_YEYAKNO_1', 'SEQ_YEYAKNO_2', 'SEQ_YEYAKNO_3');




create table tbl_board_test_2
  (boardno        number
  ,subject        varchar2(100)
  ,registerdate   date default sysdate
  );
  -- Table TBL_BOARD_TEST_2이(가) 생성되었습니다.
          
-- 생성되어진  seq_yeyakno_2.nextval 을 tbl_board_test_2에 넣음

 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '첫번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '두번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '세번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '네번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '다섯번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '여섯번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '일곱번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '여덟번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '아홉번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '열번째 글입니다.');
 insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '열한번째 글입니다.');
 
 commit;        
 
 select *
 from tbl_board_test_2;




-- *** 시퀀스 SEQ_YEYAKNO_2 이 마지막으로 사용되어진 값(= 현재 시퀀스값) 을 알아보려고 한다. *** -- 
select seq_yeyakno_2.currval
from dual;
-- 11

select last_number  -- 다음번에 들어올 시퀀스 값을 미리 알려주는 것이다.
from user_sequences
where sequence_name = 'SEQ_YEYAKNO_2';


---- *** 시퀀스(sequence) 삭제하기 *** ----
drop sequence seq_yeyakno_2;
-- Sequence SEQ_YEYAKNO_2이(가) 삭제되었습니다.


---- **** 생성되어진 시퀀스(sequence)를 조회해 봅니다. **** ----
select *
from user_sequences
where sequence_name in('SEQ_YEYAKNO_1', 'SEQ_YEYAKNO_2', 'SEQ_YEYAKNO_3');

 
 
------------ 시퀀스는 아주아주 많이 쓰인다. -----------------

profile
개발하는 심심이

0개의 댓글