반응형

 

시퀀스(SEQUENCE)

- 유일(UNIQUE)한 값을 생성해주는 오라클 객체(NOCYCLE일때)
- 시퀀스를 생성하면 기본 키와 같이 순차적으로 증가하는 칼럼을 자동적으로 생성할 수 있게 된다.(INCREMENT가 양수일 경우)
- SEQUENCE를 생성할 때 값을 지정하지 않으면 1부터 1씩 증가.
- 즉, 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기라 보면 됨.
--명명규칙(권장)
SEQ_[테이블명_]컬럼명

- 테이블에 종속적이지 않다.(ROLLBACK 상관없이 증감됨, 증감된 값을 삭제하더라도 다음 값으로 진행됨)

-- 자료형에 오류가 나면 시퀀스 불가 ''없는 문자형
-- 제약조건에 오류가 나면 시퀀스 출력
--공간이 없는 경우에도 증감되지 않는다.
CREATE SEQUENCE SEQ_NO NOCACHE;


SYNTAX
CREATE SEQUENCE sequence_name
① [START WITH n] --초기시작값 default = 1; 수정불가
② [INCREMENT BY n] -- 증감값 / default = 1;  
③ [{MAXVALUE n | NOMAXVALUE}] default = 9999...
④ [{MINVALUE n | NOMINVALUE}] defalut = -9999...
⑤ [{CYCLE | NOCYCLE}] -- 종료시 MIN값 인식
⑥ CACHE | NOCACHE --CAHCE 공간 1이상
--시퀀스를 MAX부터 -1씩 감소하게 하려면
CREATE SEQUENCE SEQ_NO
START WITH 5 -- 생략가능
INCREMENT BY -1
MAXVALUE 5 --생략불가, START값이 MAX보다 크면 안 됨
NOCACHE; --생략가능, 디폴트가 NOCACHE
--CYCLE인 경우 반드시 MINVALUE가 존재해야 함.
CURRVAL, NEXTVAL -> PSEUDO COLUMN중 하나
- CURRVAL : 현재 값을 반환한다.
- NEXTVAL : 현재 시퀀스값의 다음 값을 반환한다.
- CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성해야 한다.
- 즉, NEXTVAL로 새로운 값을 생성한 다음에 이 값을 CURRVAL에 대체하게 된다는 이야기이다.

NEXTVAL, CURRVAL을 사용할 수 있는 경우
- SELECT문(아래 불가능부분 제외)
- INSERT문의  SELECT절, VALUES절
- UPDATE문의 SET절
- CREATE문의 서브쿼리

NEXTVAL, CURRVAL을 사용할 수 없는 경우
- VEIW의 SELECT절

- DISTINCT 키워드가 있는 SELECT 문
- SELECT문의 GROUP BY, HAVING, ORDER BY절
- SELECT, DELETE, UPDATE문의 WHERE조건
- CREATE TABLE, ALTER TABLE의 DEFAULT

시퀀스 사용형식
시퀀스명.NEXTVAL     시퀀스명.CURRVAL
CREATE SEQUENCE SEQ_NO
--START WITH 1
INCREMENT BY 2
MAXVALUE 5
--MINVALUE 1
CYCLE CACHE 2;
--CYCLE은 CACHE 또는 NOCACHE로 꼭 설정을 해주어야 하며,CACHE값은 1보다 크고 한 사이클 주기(MINVALUE와 MAXVALUE, INCREMENT BY 값까지 체크하여 확인)보다 작거나 같아야 한다.


INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java1', 'java', sysdate); --1
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java2', '자바', sysdate); --3
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java3', '수업', sysdate); --5
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java2', '영어', sysdate); --1 중복값으로 오류(PK적용된 상태)

ALTER TABLE BOARD DROP CONSTRAINT SYS_C007091;

INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java3', '수업', sysdate); --3
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java2', '영어', sysdate); --5
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java2', '영어', sysdate); --1
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java1', 'java', sysdate); 
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java2', '자바', sysdate);
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java3', 수업, sysdate);
--자료형에서 오류가 나면 SEQUENCE 불가
INSERT INTO BOARD VALUES(SEQ_NO.NEXTVAL, 'java3', '수업', sysdate);




SELECT SEQ_NO.CURRVAL FROM DUAL; --현재 번호표 조회
ALTER SEQUENCE 
  START WITH 수정불가
  CYCLE CACHE n = n 값은 증감값 미만
ALTER SEQUENCE DEPT_SEQ 
  START WITH 13  --수정불가
  INCREMENT BY 10
  MAXVALUE 100
  MINVALUE 10
  CYCLE CACHE 9; --증감값 미만
DROP SEQUENCE  DROP SEQUENCE SEQ_NO;

SEQUENCE MINVALUE,

COLUMN DATA TYPE 조건 확인

제약 조건

반응형

'[ORACLE]' 카테고리의 다른 글

[ORACLE] SYNONYM  (0) 2024.01.23
[ORACLE] DCL - GRANT, REVOKE, ALTER USER RENAME  (0) 2024.01.23
[ORACLE] INDEX  (0) 2024.01.22
[ORACLE] JOIN  (0) 2024.01.19
[ORACLE] SQL파일 export&import  (0) 2024.01.18

+ Recent posts