-------- **** ==== 시퀀스(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');
------------ 시퀀스는 아주아주 많이 쓰인다. -----------------