728x90
SEQUENCE
: 자동번호 부여
-
숫자값이 일정한 규칙에 의해서 연속적으로 자동증가.
CREATE SEQUENCE sequence\_name [INCREMENT BY] 증가치 [START WITH] 초기값 [MAXVALUE n|NOMAXVALUE] [MINVALUE|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE|NOCACHE];
-
테이블에 종속적이지 않다(테이블과 독립적)
-
maxvalue : 시퀀스가 가질 수 있는 최대값 지정.
nomaxvalue일 경우 ascending순서일 경우 10의 27승
descending일 경우 -1 -
minvalue : 시퀀스가 가질 수 있는 최소값 지정.
nominvalue일 경우 ascending 1
descending 10의 26승으로 설정. -
cache : 메모리상의 시퀀스 값을 관리하도록 하는 것인데 기본값은 20.
nocache는 메모리 상에서 시퀀스를 관리하지 않음.
시퀀스명.nextval ==> 발생된 번호값(그다음)
시퀀스명.currval ==> 현재 번호값
CREATE SEQUENCE test\_seq; --기본 1부터 시작해서 1씩 증가되는 숫자값
DROP SEQUENCE test\_seq;
CREATE SEQUENCE test\_seq START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE;
-- 자동번호(숫자) 얻어오기
SELECT test\_seq.nextval FROM dual;
-- 현재숫자 보기(조회)
SELECT test\_seq.currval FROM dual;
테이블에 적용
CREATE TABLE dept3 AS SELECT * FROM dept WHERE 1=0;
INSERT INTO dept3 (dname,loc) VALUES ('기획부', '강남');
SELECT MAX(deptno) FROM dept3; --30번 부서
SELECT deptno FROM dept3;
-- 시퀀스 객체 사용
CREATE SEQUENCE dept3_seq START WITH 10
INCREMENT BY 10
NOCYCLE
NOCACHE;
-- 시퀀스 적용된 부서번호 생성
INSERT INTO dept3 VALUES (dept3_seq.nextval, '영업부', '서초');
INSERT INTO dept3 VALUES (dept3_seq.nextval, '기획부', '강남');
INSERT INTO dept3 VALUES (dept3_seq.nextval, '개발부', '오노');
Oracle 11g에서 시퀀스 사용시 세팅할 사항
deferred_segment_creation=true(기본값) ===> false로 변경
alter system set deferred_segment_creation=false;
ORA-01031: insufficient privileges ==> 권한불충분
SQL> conn system/oracle
Connected.
SQL> alter system set deferred_segment_creation=false;
System altered.
SQL> conn scott/tiger
Connected.
'Web develop > SQL' 카테고리의 다른 글
[SQL/ORACLE] PL/SQL 반복문 형식 (LOOP, FOR, 다중 FOR문,WHILE) (0) | 2019.06.16 |
---|---|
[SQL/ORACLE] PL/SQL 조건문 형식 및 사용예제 (if문, if~else문, if~elif~else문) (0) | 2019.06.15 |
[SQL/ORACLE] 제약조건 설명 및 사용법 (NOT NULL, UNIQUE, PK, FK, CHECK) (0) | 2019.06.15 |
[SQL/ORACLE] TOP-N 사용 예제 (0) | 2019.06.15 |
[SQL/ORACLE] VIEW 형식 및 사용법 (0) | 2019.06.15 |