-- 시퀀스(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;
create sequence seq_yeyakno_1
start with 1 -- 첫번째 출발은 1 부터 한다.
increment by 1 -- 증가치는 1이다. ==> 1씩 증가 2 3 4 5 ......
maxvalue 5 -- 최대값이 5 이다.
minvalue 2 -- 최소값이 2 이다.
cycle -- 반복을 한다.
nocache;
/*
[오류 발생] ORA-04006: START WITH 에 MINVALUE 보다 작은 값은 지정할 수 없습니다
minvalue 숫자 값은 start with 숫자 값과 같거나 보다 작아야 한다.
*/
drop sequence seq_yeyakno_1;
시퀀스 SEQ_YEYAKNO_1 생성하기
create sequence seq_yeyakno_1
start with 2 -- 첫번째 출발은 2 부터 한다.
increment by 1 -- 증가치는 1이다. ==> 1씩 증가 2 3 4 5 ......
maxvalue 5 -- 최대값이 5 이다.
minvalue 1 -- 최소값이 1 이다.
cycle -- 반복을 한다.
nocache;
-- Sequence SEQ_YEYAKNO_1이(가) 생성되었습니다.
-- 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 ...
-- 2(start with) 3 4 5(maxvalue) 1(minvalue) 2 3 4 5 1 2 3 4 5 1 2 3 ...
테이블 TBL_BOARD_TEST_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 이 들어온다.
insert into tbl_board_test_1(boardno, subject) values(seq_yeyakno_1.nextval, '여섯번째 글입니다.');
-- 1 행 이(가) 삽입되었습니다.
-- seq_yeyakno_1 시퀀스의 increment 값이 1 이었다.
commit;
시퀀스 SEQ_YEYAKNO_2 생성하기
create sequence seq_yeyakno_2
start with 1 -- 첫번째 출발은 2 부터 한다.
increment by 1 -- 증가치는 1이다. ==> 1씩 증가 2 3 4 5 ......
nomaxvalue -- 최대값이 5 이다.
nominvalue -- 최소값이 1 이다.
nocycle -- 반복을 한다.
nocache;
-- Sequence SEQ_YEYAKNO_2이(가) 생성되었습니다.
테이블 TBL_BOARD_TEST_2 생성하기
create table tbl_board_test_2
(boardno number
,subject varchar2(100)
,registerdate date default sysdate
);
-- Table 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;
생성된 시퀀스(sequence) 정보를 조회하기
select *
from user_sequences;
시퀀스에서 마지막으로 사용된 값 알아내기
----- ***** 시퀀스 SEQ_YEYAKNO_1 이 마지막으로 사용된 값을 알고자 한다. ***** -----
select SEQ_YEYAKNO_1.currval
from dual; -- 2
----- ***** 시퀀스 SEQ_YEYAKNO_2 이 마지막으로 사용된 값을 알고자 한다. ***** -----
select SEQ_YEYAKNO_2.currval
from dual; -- 11
시퀀스에서 다음에 들어올 값을 조회하기
-- [틀린 풀이]
select SEQ_YEYAKNO_2.nextval
from dual; -- 12
select SEQ_YEYAKNO_2.nextval
from dual; -- 13
-- nextval 은 시퀀스 SEQ_YEYAKNO_2 의 값을 써버리는 것이다.
insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '서교밥집(5500원)');
-- 14 서교밥집(5500원) 22/07/12
commit;
select *
from tbl_board_test_2;
-- [올바른 풀이]
select last_number
from user_sequences
where sequence_name = 'SEQ_YEYAKNO_2';
-- 15
insert into tbl_board_test_2(boardno, subject) values(seq_yeyakno_2.nextval, '강아지와 친해요');
commit;
select *
from tbl_board_test_2;
시퀀스 삭제하기
----- ***** 시퀀스 SEQ_YEYAKNO_1 삭제하기 ***** -----
drop sequence SEQ_YEYAKNO_1;
-- Sequence SEQ_YEYAKNO_1이(가) 삭제되었습니다.
'SQL' 카테고리의 다른 글
Constraint(제약조건), INDEX(인덱스, 색인) (0) | 2022.07.12 |
---|---|
시노님(Synonym, 동의어) (0) | 2022.07.12 |
오라클 계정 생성하기 (0) | 2022.07.12 |
DDL(Data Definition Language, 데이터 정의어) ==> create, drop, alter, truncate (0) | 2022.07.12 |
트랜잭션 제어어(TCL == Transaction Control Language) - commit, rollback (0) | 2022.07.12 |