hyeonga_code
Database_57_데이터베이스 객체_시퀀스_Sequence 본문
![](https://blog.kakaocdn.net/dn/benNVm/btsqBqM4zxi/WnQ7VKAyauodJ4MFqZPaYK/img.jpg)
-- 데이터베이스 객체
-- 시퀀스
-- 고유 번호를 자동으로 생성합니다.
-- 공유가 가능한 객체입니다.
-- 일반적으로 기본 키 값을 생성하는 데에 사용합니다.
-- 응용 프로그램 코드를 대체합니다.
-- 생성
/*
CREATE SEQUENCE sequence
[ INCREMENT BY n ] : 증가 값을 지정합니다.
[ START WITH n ] : 시작 값을 지정합니다.
[ { MAXVALUE n | NOMAXVALUE } ] : 시퀀스의 최대값을 지정합니다.
[ { MINVALUE n | NONMINVALUE } ] : 시퀀스의 최소값을 지정합니다.
[ { CYCLE | NOCYCLE } ] : 최대값에 도달하는 경우 순환의 여부를 지정합니다.
[ { CACHE n | NOCACHE } ] : 원하는 숫자 만큼 미리 생성해 두는 지에 대한 여부를 지정합니다.
*/
-- 존재하는 테이블을 삭제합니다.(없는 경우 오류)
DROP TABLE dept PURGE;
DROP TABLE emp PURGE;
-- 시퀀스를 생성합니다.
CREATE SEQUENCE dept_deptno_seq
INCREMENT BY 10
START WITH 200
NOCACHE
NOCYCLE;
/*
Sequence DEPT_DEPTNO_SEQ이(가) 생성되었습니다.
*/
-- 부서 테이블을 생성합니다.
CREATE TABLE dept
AS
SELECT department_id, department_name
FROM departments;
/*
Table DEPT이(가) 생성되었습니다.
*/
-- 직원 테이블을 생성합니다.
CREATE TABLE emp
AS
SELECT employee_id, last_name, department_id
FROM employees;
/*
Table EMP이(가) 생성되었습니다.
*/
-- 시퀀스 요소 확인
DESC user_sequences;
/*
이름 널? 유형
--------------------------------------------------------------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
*/
-- 시퀀스의 정보를 확인합니다.
SELECT sequence_name, increment_by, last_number
FROM user_sequences;
![](https://blog.kakaocdn.net/dn/bLDRvI/btsqujnAhge/sU5yEqmveSGbIERO8PfuuK/img.png)
-- 부서 테이블 정보를 조회합니다.
SELECT * FROM dept;
![](https://blog.kakaocdn.net/dn/zbqtZ/btsqCtIVqyy/f19MJfsYQFFhE6Evtruzt0/img.png)
-- 부서 테이블에 시퀀스를 적용하여 데이터를 삽입합니다.
INSERT INTO dept
VALUES(dept_deptno_seq.NEXTVAL, 'Sales2');
/*
1 행 이(가) 삽입되었습니다.
*/
-- 부서 테이블의 정보를 조회합니다.
SELECT * FROM dept;
-- 마지막 번호인 190번에 증가값 10을 더한 200으로 삽입되었습니다.
![](https://blog.kakaocdn.net/dn/bOH1dX/btsqwAW0ssN/aIOM0cwF3exR3HE8quGR1K/img.png)
-- 데이터를 삽입 전으로 되돌립니다.
ROLLBACK;
/*
롤백 완료.
*/
-- 시퀀스를 활용하여 데이터를 삽입합니다.
INSERT INTO dept
VALUES(dept_deptno_seq.NEXTVAL, 'Sales2');
/*
1 행 이(가) 삽입되었습니다.
*/
-- 부서 테이블을 조회합니다.
SELECT * FROM dept;
-- 200번을 삭제하였지만 마지막 번호였으므로 200+10 번으로 지정됩니다.
![](https://blog.kakaocdn.net/dn/v660r/btsqAwGJU49/s6zmBBA27kOJWwzsLIKK30/img.png)
-- 시퀀스 확인
/*
SELECT sequenct_name, min_value, max_value, increment_by, last_number
FROM user_sequences;
*/
-- NEXTVAL : 사용이 가능한 다음 시퀀스 값을 반환합니다.
-- CURRVAL : 현재 시퀀스 값을 반환합니다.
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM user_sequences;
![](https://blog.kakaocdn.net/dn/QVmX7/btsqCrxCeZL/25ylQ1vVEhIlA0XwOXDWSK/img.png)
-- 현재 시퀀스 번호를 확인합니다.
SELECT dept_deptno_seq.CURRVAL
FROM dual;
![](https://blog.kakaocdn.net/dn/b9JyGt/btsqBptNfDH/VU84CkxA2A9d4M5g9Cl2Bk/img.png)
-- 시퀀스 수정
-- 증가값, 최대값, 최소값, CYCLE 옵션, CACHE 옵션을 변경할 수 있습니다.
/*
ALTER SEQUENCE sequence
INCREMENT BY n
MAXVALUE n
MINVALUE n
NOCHACHE
NOCYCLE;
-- START WITH 절은 사용할 수 없습니다.
-- 시퀀스의 시작 값을 변경하려면 시퀀스를 삭제한 후 다시 생성해야 합니다.
*/
-- 시퀀스 증가값을 20으로 변경합니다.
ALTER SEQUENCE dept_deptno_seq
INCREMENT BY 20;
SELECT object_name, object_type, created, status
FROM user_objects
WHERE object_name LIKE 'DEPT%';
![](https://blog.kakaocdn.net/dn/6U1fM/btsqBONBMma/G06JZrSK598TgUtfrY25k1/img.png)
-- 시퀀스 제거
-- 제거된 시퀀스는 더 이상 참조할 수 없습니다.
/*
DROP SEQUENCE sequence;
*/
-- 시퀀스를 삭제합니다.
DROP SEQUENCE dept_deptno_seq;
/*
Sequence DEPT_DEPTNO_SEQ이(가) 삭제되었습니다.
*/
'Oracle Database' 카테고리의 다른 글
Database_59_사용자 접근 제어_DCL (0) | 2023.08.14 |
---|---|
Database_58_데이터베이스 객체_동의어_SYNONYM (0) | 2023.08.13 |
Database_56_데이터베이스 객체_뷰_VIEW (0) | 2023.08.12 |
Database_55_SQL 데이터베이스 객체 (0) | 2023.08.11 |
Database_54_SQL 제약 조건_Constraint( Not null, Unique, Primary Key, Foreign Key, Check) (0) | 2023.08.10 |