DBMS sequence.sql 활용

으누·2024년 8월 30일
1
post-thumbnail

sequence.sql

시퀀스( sequence )

- 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 생성기 입니다

- CREATE SEQUENCE sequence_name

START WITH -> 시퀀스 번호의 시작값 설정

INCREMENT BY -> 연속적인 시퀀스 번호의 증가치

MAXVALUE | NOMAXVALUE -> 최대값 지정

MINVALUE | NOMINVALUE -> 최소값 지정

CYCLE | NOCYCLE -> 시퀀스 최대값까지 완료되면 시작값에 다시 시작

CACHE | NOCACHE -> 시퀀스 값의 메모리 미리 할당 여부

-- 시퀀스 객체 생성

CREATE SEQUENCE TEST_EQ
START WITH 1
INCREMENT BY 1;

-- NEXTVAL 로 새로운 값을 생성

SELECT TEST_EQ.NEXTVAL
FROM DUAL;

-- 시퀀스 객체의 현재값

SELECT TEST_EQ.CURRVAL
FROM DUAL;

-- 시퀀스 객체 삭제

DROP SEQUENCE TEST_EQ;

-- 연습 테이블 생성

DROP TABLE emp01 PURGE;
CREATE TABLE emp01(
empno NUMBER(4) CONSTRAINT PK_SEQ_EMPNO PRIMARY KEY,
ename VARCHAR2(10),
hiredate DATE
);
DESC emp01;

-- emp01 테이블의 empno 컬럼 시퀀스 객체 생성

CREATE SEQUENCE emp01_empno_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 1000;

-- 데이터 추가

INSERT INTO emp01 VALUES (emp01_empno_seq.nextval, 'man_a', SYSDATE);
INSERT INTO emp01 VALUES (emp01_empno_seq.nextval, 'man_b', SYSDATE);
SELECT * FROM emp01;

시퀸스 객체 삭제

DROP SEQUENCE emp01_empno_seq;

시퀀스 수정

- ALTER SEQUENCE 는 START WITH 절 빼고, CREATE SEQUENCE 와 구조가 동일합니다

- START WITH 옵션은 변경할 수 없고, 다시 시작하려면 시퀀스를 삭제하고 다시 생성해야 합니다

-- 연습용 테이블 생성

CREATE TABLE SEQTEST(
sno NUMBER(2) PRIMARY KEY
);
DESC SEQTEST;

-- 데이터 추가

INSERT INTO SEQTEST VALUES (SEQTEST_SEQ.NEXTVAL);
INSERT INTO SEQTEST VALUES (SEQTEST_SEQ.NEXTVAL);
INSERT INTO SEQTEST VALUES (SEQTEST_SEQ.NEXTVAL);
SELECT * FROM SEQTEST;

-- INSERT INTO SEQTEST VALUES (SEQTEST_SEQ.NEXTVAL); error

-- 시퀀스 최대값 수정

ALTER SEQUENCE SEQTEST_SEQ
MAXVALUE 10;
INSERT INTO SEQTEST VALUES (SEQTEST_SEQ.NEXTVAL);
SELECT * FROM SEQTEST;
DROP TABLE SEQTEST PURGE;
DROP SEQUENCE SEQTEST_SEQ;

quiz

-- 부서정보를 가지는 테이블을 생성하세요 : 부서번호, 부서명, 지역

-- > 부서번호는 sequence 를 사용해서 적용 합니다( 초기값 10, 10씩 증가 )

CREATE TABLE QDEPT(
deptno NUMBER(2) PRIMARY KEY,
dname VARCHAR2(20),
loc VARCHAR2(20)
);
DESC QDEPT;
CREATE SEQUENCE QDEPT_DEPTNO_SEQ 
START WITH 10
INCREMENT BY 10
NOCACHE NOCYCLE;
INSERT INTO QDEPT VALUES (QDEPT_DEPTNO_SEQ.NEXTVAL, '부서-A', '지역-A');
INSERT INTO QDEPT VALUES (QDEPT_DEPTNO_SEQ.NEXTVAL, '부서-B', '지역-B');
INSERT INTO QDEPT VALUES (QDEPT_DEPTNO_SEQ.NEXTVAL, '부서-C', '지역-C');
SELECT * FROM QDEPT;
DROP TABLE QDEPT PURGE;
DROP SEQUENCE QDEPT_DEPTNO_SEQ;
profile
코딩 일기장

0개의 댓글