오라클 시퀀스(Oracle Sequence), 오라클학원교육에서 많이 본 MS-SQL IDENTITY, MySQL AUTO_INCREMENT와 유사하죠, 오라클 시퀀스(Oracle Sequence), ORACLE교육/오라클교육/SQL교육/오라클시퀀스교육
http://ojc.asia/bbs/board.php?bo_table=LecOracle&wr_id=298
ojc.asia
오라클 시퀀스(Oracle Sequence)
실습 : 오라클19C
오라클 시퀀스sequence는 다중 사용자 환경에서 사용하는 “숫자(일련번호) 자동 생성기” 입니다. 주로 PK primary key, UKunique key 컬럼 값을 유일하게 자동 생성하는 경우에 사용됩니다.

MS-SQL 및 MySQL은 테이블의 속성으로 시퀀스 기능을 제공하는데 MS-SQL은 컬럼의 identity 속성으로 MySQL은 auto_increment 속성으로 제공 합니다. 반면 오라클에서는 테이블 또는 컬럼과는 독립적으로 생성되는 스키마 오브젝트로 생성 및 삭제 됩니다.
https://www.youtube.com/watch?v=Fz3r6jNhXUs&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=28

시퀀스.CURRVAL : 시퀀스의 현재 값을 리턴 합니다.
시퀀스.NEXTVAL : 시퀀스를 증가시키고 다음값을 리턴 합니다.
[기본형식]
CREATE SEQUENCE sequence_name [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]
|
시퀀스를 생성 후 딕셔너리 뷰에서 확인을 하고 INSERT문에서 활용을 한 후 삭제해 보겠습니다.
실습
시퀀스를 생성 합니다.
8000부터 시작해서 1 씩 증가하는 시퀀스를 생성해 보세요. |
CREATE SEQUENCE SEQ_EMP_EMPNO START WITH 8000 INCREMENT BY 1;
<실행결과>
Sequence SEQ_EMP_EMPNO이(가) 생성되었습니다.
생성한 시퀀스를 딕셔너리 뷰에서 확인을 합니다. USER_SEQUENCES 뷰에서 사용자가 생성한 시퀀스 정보를 조회 합니다.
SEQ_EMP_EMPNO 시퀀스의 이름, 증분 값, 캐시사이즈, 마지막 생성 번호를 조회 하세요. |
SELECT SEQUENCE_NAME, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_EMP_EMPNO';
<실행결과>
| SEQUENCE_NAME | INCREMENT_BY | CACHE_SIZE | LAST_NUMBER |
1 | SEQ_EMP_EMPNO | 1 | 20 | 8000 |
시퀀스 생성시 시작값을 8000으로 부여해서 마지막 생성 번호는 8000으로 되어 있음을 확인할 수 있습니다.
생성한 시퀀스의 현재 값을 조회 합니다.
SEQ_EMP_EMPNO 시퀀스의 현재 값(CURRVAL)을 조회 하세요. |
SELECT SEQ_EMP_EMPNO.CURRVAL FROM DUAL;
<실행결과>
ORA-08002: 시퀀스 SEQ_EMP_EMPNO.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다.
생성된 시퀀스는 최초 한번은 NEXTVAL을 해야만 CURRVAL 값을 조회할 수 있습니다.
SEQ_EMP_EMPNO.NEXTVAL해 보겠습니다.
SEQ_EMP_EMPNO 시퀀스의 다음값을(NEXTVAL)을 조회 하세요. |
SELECT SEQ_EMP_EMPNO.NEXTVAL FROM DUAL;
<실행결과>
| NEXTVAL |
1 | 8000 |
NEXTVAL을 했지만 최초 시작 값 8000이 조회 됩니다.시퀀스 생성 후 최초 NEXTVAL을 하면 생성시 부여한 START WITH 값이 조회 됩니다. 그 이후부터는 NEXTVAL을 하면 1 씩 증가 합니다.
다시 SEQ_EMP_EMPNO.NEXTVAL 후 시퀀스의 현재 값(CURRVAL)을 조회 해 보겠습니다.
SEQ_EMP_EMPNO 시퀀스의 다음값을(NEXTVAL)을 조회 하세요. |
SELECT SEQ_EMP_EMPNO.NEXTVAL FROM DUAL;
<실행결과>
| NEXTVAL |
1 | 8001 |
SEQ_EMP_EMPNO 시퀀스의 현재값을(CURRVAL)을 조회 하세요. |
SELECT SEQ_EMP_EMPNO.CURRVAL FROM DUAL;
<실행결과>
| CURRVAL |
1 | 8001 |
SEQ_EMP_EMPNO 시퀀스를 이용하여 EMP 테이블에 데이터를 입력해 보겠습니다. 현재 시퀀스의 CURRVAL 값은 8001 입니다.
SEQ_EMP_EMPNO 시퀀스를 이용하여 EMP 테이블에 2건의 데이터를 입력 합니다. |
INSERT INTO EMP (EMPNO, ENAME) VALUES (SEQ_EMP_EMPNO.NEXTVAL, '홍길동');
INSERT INTO EMP (EMPNO, ENAME) VALUES (SEQ_EMP_EMPNO.NEXTVAL, '김길동');
COMMIT;
EMPNO는 처음 INSERT 문에 의해 8002가 되고 두번째 INSERT문에 의해서는 8003이 됩니다.
EMP 테이블의 데이터를 조회해 보겠습니다.
EMP 테이블에서 이름(ename)에 “길동” 이라는 문자열이 포함된 사원을 조회 하세요. |
SELECT EMPNO, ENAME FROM EMP
WHERE ENAME LIKE '%길동%';
<실행결과>
| EMPNO | ENAME |
1 | 8002 | 홍길동 |
2 | 8003 | 김길동 |
DROP SEQUENCE 명령으로 시퀀스를 삭제해 보겠습니다.
SEQ_EMP_EMPNO 시퀀스를 삭제 하세요. |
DROP SEQUENCE SEQ_EMP_EMPNO;
<실행결과>
Sequence SEQ_EMP_EMPNO이(가) 삭제되었습니다.
다음과 같은 경우에는 시퀀스를 사용할 수 없습니다.
1. CREATE TABLE EMP_TEST (
EMPNO NUMBER DEFAULT SEQ_EMP_EMPNO.NEXTVAL
)
위 구문은 오라클12C 이전 버전에서는 오류가 발생 합니다. 12C 이상에서는 사용 가능 합니다.
2. SELECT DISTINCT SEQ_EMP_EMPNO.NEXTVAL FROM DUAL
DISTINCT와 함께 시퀀스 값을 사용할 수 없습니다.
3. SELECT SUM(SAL) FROM EMP
GROUP BY SEQ_EMP_EMPNO.NEXTVAL
시퀀스는 GROUP BY 절에 사용될 수 없습니다.
#시퀀스, #오라클시퀀스,#sequence, #오라클학원, #SQL학원, #SQL교육, #오라클교육, #ORACLE교육, #ORACLE학원, #ORACLE동영상, #ORACLE강좌, #오라클학원동영상, #SQL학원동영상,시퀀스, 오라클시퀀스,sequence, 오라클학원, SQL학원, SQL교육, 오라클교육, ORACLE교육, ORACLE학원, ORACLE동영상, ORACLE강좌, 오라클학원동영상, SQL학원동영상