2020년 7월 20일 월요일

오라클 시퀀스(ORACLE SEQUENCE)

오라클 시퀀스(ORACLE SEQUENCE)

14. 시퀀스(Sequence)

n 다중 사용자 환경에서 사용하는 숫자(일련번호) 자동 생성기.

n PK, UK 칼럼의 값을 유일하게 자동으로 생성하는 경우에도 사용된다.

n 트랜잭션 내에서 시퀀스가 생성되어 사용되다가 롤백 되는 경우에 다음 시퀀스 번호는 SKIP 될 수 있다.

n 테이블 또는 칼럼과는 독립적으로 생성, 삭제된다.

n CURRVAL : 시퀀스의 현재 값을 리턴

n NEXTVAL : 시퀀스를 증가시키고 next value를 리턴한다.

[형식]

CREATE SEQUENCE sequence_name

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}]

n INCREMENT BY n : 생성되는 Sequence번호의 간격을 정수 n으로 정의. 옵션이 생략되면 시퀀스는 1씩 증가한다.

n START WITH n : 첫 번째 Sequence 번호를 정의, 옵션이 생략되면 시퀀스는 1부터 시작한다.

n MAXVALUE n : Sequence의 최대값을 정의. NOMAXVALUE가 default이며 최대값은 10의 27승이다.

n MINVALUE n : 생성 가능한 Sequence의 최소값을 정의, 디폴트가 NOMINVALUE이며 최소값은 1이다.

n CACHE n : 서버가 메모리 캐시에 미리 생성해 놓는 시퀀스 개수. 기본 값은 20 이고 캐시하지 않으려면 NOCACHE 옵션을 사용하면 된다.

[시퀀스를 사용할 수 없는 예]

SQL> CREATE TABLE seq_tab ( a NUMBER DEFAULT s1.NEXTVAL);

(* Error 발생) ß Oracle12C 이상에서는 가능

SQL> SELECT DISTINCT s1.NEXTVAL FROM dual;

(* Error 발생)

SQL> SELECT SUM(salary) FROM s_emp GROUP BY s1.NEXTVAL;

(* Error 발생)

SQL> create sequence seq_e1;

시퀀스가 생성되었습니다.

SQL> select seq_e1.currval from dual;

select seq_e1.currval from dual

*

1행에 오류:

ORA-08002: 시퀀스 SEQ_E1.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

-- 최초 한번은 NEXTVAL해야만 CURRVAL 값을 조회 가능하다.

SQL> create table test4 (n number);

테이블이 생성되었습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> insert into test4 values (seq_e1.nextval);

1 개의 행이 만들어졌습니다.

SQL> select * from test4;

N

----------

1

2

3

SQL> drop sequence seq_e1;

시퀀스가 삭제되었습니다.

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...