-- (자동 번호 발생기 역활을 하는 시퀀스에 대해서 살펴보겠습니다.)
-- 1. 시퀀스 개념 이해와 시퀀스 생성
-- 2. 시퀀스 관련 데이터 딕셔너리
-- 3. CURRVAL, NEXTVAL
-- 4. 시퀀스 실무에 적용하기
-- 5. 시퀀스 제거
-- 6. 시퀀스 수정
-- 01. 시퀀스 개념 이해와 시퀀스 생성
-- 시퀀스는 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기이다.
-- 시퀀스를 기본 키로 사용하게 되면 사용자의 부담을 줄일 수 있다.
-- 1.1 뷰의 기본 테이블
-- 시퀀스를 생성하기 위한 기본 형식입니다.
-- CREATE SEQUENCE sequence_name
-- [START WITH n]
-- [INCREMENT BY n]
-- [{MAXVALUE n|NOMAXVALUE}]
-- [{MINVALUE n|NOMINVALUE}]
-- [{CYCLE|NOCYCLE}]
-- [{CACHE n|NOCACHE}]
-- 1. START WITH
-- 시퀀스 번호의 시작값을 지정할 때 사용됩니다. 만일 1부터 시작되는 시퀀스를
-- 생성하려면 START WITH 1이라고 기술하면 됩니다.
-- 2. INCREMENT BY
-- 연속적인 시퀀스 번호의 증가치를 지정할 때 사용됩니다. 만일 1씩 증가하는
-- 시퀀스를 생성하려면 INCREMENT BY 1이라고 기술하면 됩니다.
-- 3. MAXVALUE n|NOMAXVALUE
-- MAXVALUE은 시퀀스가 가질 수 있는 최대값을 지정합니다. 만일
-- NOMAXVALUE를 지정하게 되면 ASCENDING 순서일 경우에는 10^27이고
-- DESCENDING 순서일 경우에는 -1로 설정됩니다.
-- 4. MINVALUE n|NOMINVALUE
-- MAXVALUE은 시퀀스가 가질 수 있는 최소값을 지정합니다. 만일
-- NOMINVALUE을 지정하게 되면 ASCENDING 순서일 경우에는 1이고
-- DESCENDING 순서일 경우에는 10^26으로 설정됩니다.
-- 5. CYCLE|NOCYCLE
-- CYCLE은 지정된 시퀀스 값이 최대값까지 증가가 완료되게 되면 다시
--START WITH 옵션에 지정한 시작 값에서 다시 시퀀스를 시작하도록 합니다.
-- NOCYCLE은 증가가 완료하게 되면 에러를 유발시킵니다.
-- 6. CACHE n|NOCACHE
-- CACHE은 메모리상의 시퀀스 값을 관리하도록 하는 것인데 기본 값은
-- 20입니다. NOCACHE는 원친적으로 메모리 상에서 시퀀스를 관리하지 않습니다.
-- 시작 값이 1이고 1씩 증가하는 시퀀스 EMP_SEQ을 생성하시오.
CREATE SEQUENCE DEPT_DEPTNO_SEQ
INCREMENT BY 10
START WITH 10;
-- 02. 시퀀스 관련 데이터 딕셔너리
-- 시퀀스(SEQUENCE)에 대한 자료사전의 이름은 USER_SEQUENCES이다.
-- 생성된 시퀀스 객체에 대한 정보를 저장하는 데이터 딕셔너리로는 USER_SEQUENCES가 있다.
-- 03. CURRVAL, NEXTVAL
-- 시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용하고, 다음 값을 알아내기 위해서는 NEXTVAL를 사용합니다.
-- CURRVAL : 현재 값을 반환한다.
-- NEXTVAL : 현재 시퀀스값의 다음 값을 반환한다.
-- CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성해야 한다.
-- 즉, NEXTVAL로 새로운 값을 생성한 다음에 이 값을 CURRVAL에 대체하게 된다.
-- NEXTVAL, CURRVAL을 사용하라 수 있는 경우
-- 서브 쿼리가 아닌 SELECT 문
-- INSERT 문의 SELECT 절
-- INSERT 문의 VALUE 절
-- UPDATE 문의 SET절
-- NEXTVAL, CURRVAL을 사용할 수 없는 경우
-- VIEW의 SELECT 절
-- DISTINCT 키워드가 있는 SELECT 문
-- GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
-- SELECT, DELETE, UPDATE의 서브쿼리
-- CREATE TABLE, ALTER TABLE 명령의 DEFAULT값
-- <실습하기> CURRVAL, NEXTVAL 사용하기
-- 1. NEXTVAL로 새로운 값을 생성해야 합니다.
select dept_deptno_seq.nextval from dual;
-- 2. 시퀀스의 현재 값을 알아내기 위해서 currval를 사용합니다.
select dept_deptno_seq.currval from dual;
-- 04. 시퀀스 실무에 적용하기
-- 시퀀스는 99.9%가 INSERT 연산과 같이 사용되어 컬럼 값을 자동으로 발생시키는 용도로 사용됩니다.
-- emp 테이블을 생성하며 사원 번호를 기본 키로 설정하였는데, 번호를 생성하는 시퀀스 객체를 사용하여
-- 사원번호가 자동 생성되도록 한다면 이러한 번거로움을 덜어줄 수 있습니다.
-- <실습하기> 시퀀스를 테이블의 기본 키에 접목하기
-- 1. 시작 값이 1이고 1씩 증가하고, 최댓값이 100000이 되는 시퀀스 EMP_SEQ를 생성하시오
create sequence emp_seq -- 시퀀스 이름
start with 1 -- 시작값
increment by 1 -- 증가하는 값
maxvalue 100000; -- 최댓값
-- 2. 사원 번호를 기본키로 설정하는 EMP01 테이블을 생성하여 시퀀스를 사용하시오.
drop table emp01;
create table emp01
(
empno number(4) primary key,
ename varchar(10),
hiredate date
);
-- 3. 사원 번호를 저장하는 empno 컬럼은 기본키로 설정 하였으므로 중복된 값을 가질 수없다.
-- 다음은 생성한 emp_seq 시퀀스로부터 사원번호를 자동으로 할당받아 데이터를 추가하는 문장이다.
insert into emp01 values(emp_seq.nextval, 'JULIA', sysdate);
select * from emp01;
'Study > OracleDB' 카테고리의 다른 글
Oracle Day1 (2) | 2022.09.28 |
---|---|
36강 오라클 인덱스 (1) | 2022.09.12 |
34강 오라클 가상 테이블인 view (1) | 2022.09.12 |
33강 오라클 데이터 무결성을 위한 제약 조건 (4) | 2022.09.12 |
32강 테이블 구조 생성, 변경 및 삭제하는 DDL(2) (1) | 2022.09.11 |