728x90
반응형
시퀀스(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', --자료형에서 오류가 나면 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 INCREMENT BY 10 MAXVALUE 100 MINVALUE 10 CYCLE CACHE 9; --증감값 미만 |
DROP SEQUENCE | DROP SEQUENCE SEQ_NO; |
SEQUENCE MINVALUE,
COLUMN DATA TYPE 조건 확인
제약 조건
728x90
반응형
'[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 |