-- 시퀀스
CREATE SEQUENCE DEPT_DEPTNO_SQ
INCREMENT BY 10
START WITH 10;
SELECT DEPT_DEPTNO_SQ.NEXTVAL FROM DUAL; -- 다음 값을 알아내기 위해
SELECT DEPT_DEPTNO_SQ.CURRVAL FROM DUAL; -- 시퀀스의 현재 값을 알아내기 위해
SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG
FROM USER_SEQUENCES;
SELECT * FROM DEPT_COPY;
INSERT INTO DEPT_COPY VALUES(50, 'TEST', 'TEST');
ALTER TABLE DEPT_COPY
ADD PRIMARY KEY(DEPTNO);
INSERT INTO DEPT_COPY VALUES(50, 'TEST', 'TEST'); -- unique constraint (SCOTT.SYS_C007042) violated
ROLLBACK;
INSERT INTO DEPT_COPY VALUES(DEPT_DEPTNO_SQ.NEXTVAL, 'TEST', 'TEST');
-- 예: 시퀀스를 테이블의 기본 키에 접목하기
CREATE SEQUENCE EMP_SEQ
START WITH 1
INCREMENT BY 1
MAXVALUE 100000;
DROP TABLE EMP01;
CREATE TABLE EMP01(
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR(10),
HIREDATE DATE
);
INSERT INTO EMP01
VALUES(EMP_SEQ.NEXTVAL, 'JULIA', SYSDATE);
SELECT * FROM EMP01;
-- 시퀀스 삭제
SELECT SEQUENCE_NAME, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG
FROM USER_SEQUENCES;
DROP SEQUENCE DEPT_DEPTNO_SQ;
-- 시퀀스 수정
-- 예: 시퀀스 최대값을 변경하기
CREATE SEQUENCE DEPT_DEPTNO_SEQ
START WITH 10
INCREMENT BY 10
MAXVALUE 30; -- 10부터 10씩 증가하면서 최대 30까지의 값을 갖는 시퀀스를 생성
SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;
SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;
SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;
SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL; -- 부서 번호를 계속 생성하다 보면 최대값을 넘게 됨
ALTER SEQUENCE DEPT_DEPTNO_SEQ
MAXVALUE 100; -- 최대값을 넘을 때까지 시퀀스를 생성
SELECT SEQUENCE_NAME, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG
FROM USER_SEQUENCES; -- USER_SEQUENCES 를 조회하면 시퀀스가 수정되었는지 확인할 수 있음
'~2023.02 > DB(SQL)' 카테고리의 다른 글
저장 프로시저와 저장 함수 (0) | 2022.04.14 |
---|---|
PL/SQL (0) | 2022.04.12 |
사용자 관리 (0) | 2022.04.12 |
가상 테이블인 뷰 (0) | 2022.04.11 |
데이터 무결성을 위한 제약 조건 (0) | 2022.04.11 |