일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- transient
- set
- 예외처리
- JDBC
- Connection
- 오라클
- 8bit
- Transaction
- 16bit
- array
- 상속
- Annotaion
- InputStream
- java
- Reader
- Oracle
- 난수
- swing
- 자바
- select
- 다이얼로그
- DB
- stream
- driver
- where
- 조회
- Serializable
- statement
- Join
- DB연동
- Today
- Total
오버플로
[Oracle] sequence 본문
sequence
- 순차적으로 증가하는 번호를 관리하는 객체
- 레코드를 insert하는 순서대로 번호를 넣어야 할 때
- 오라클 버전에 따라 순차적인 번호를 사용하지 못할 수도 있음
> 12c 이전에는 오라클이 종료되면 cache에 설정한 sequence 번호가 사라짐
(8i, 9i, 10g,11g)
> 12c 이후 부터는 insert를 실패한 경우에만 번호가 사라짐 (12c~19c)
- user_sequences data dictionary에서 생성된 시퀀스를 확인할 수 있음
- 시퀀스 생성) create sequence 시퀀스명
increment by 증가값
start with 시작값
maxvalue 끝값
cache 메모리에 올릴 번호 개수
반복여부; (cycle | nocycle)
> 시퀀스 생성 옵션의 기재 순서는 없음
> cache는 20이 기본, 반복여부는 nocycle(반복아님)이 기본
> 반복이 nocycle인 경우에는 maxvalue이후에 nextval하면 error
> 생성된 시퀀스는 사용자가 nextval로 값을 사용해야 메모리에 로드됨 (메모리에 생성된 시퀀스만 사용 가능)
- 값 얻기) 시퀀스명.nextval
> 메모리에 시퀀스가 로드되지 않으면 메모리에 시퀀스를 로딩하고 다음 번호를 얻음
시퀀스명.currval
> 메모리에 로드되어있는 시퀀스의 현재 번호를 얻음(메모리에 로딩은 할 수 없음)
> 시퀀스 객체가 메모리에 로딩되어있지 않다면 error 발생 (currval을 먼저 쓰면 error)
- 시퀀스 삭제) drop sequence 시퀀스명;
- 시퀀스 사용 중 쿼리가 실패하면 해당 번호는 사라짐.
따라서, 순차적인 번호가 모두 존재해야하는 경우에는 시퀀스 쓰지 말고 서브쿼리 쓰자!!
# 오늘의 코딩 #
- 시퀀스를 사용해보자!
#시퀀스 생성 및 사용
---시퀀스 생성
-- 1 ~ 100 까지 1씩 증가하는 반복하지 않는 시퀀스를 생성하고
-- cp_test_emp 테이블에 시퀀스를 사용하여 아래와 같이 사원정보를 추가하자
-- 1. 김동동 2800
-- 2. 박나나 2900
-- 3. 이사랑 2801
--시퀀스 생성
create sequence test_sequence
increment by 1
start with 1
maxvalue 100
nocycle;
--값 추가
insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '김동동', 2800);
insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '박나나', 2900);
insert into cp_test_emp(EMPNO, NAME, SAL)
values (test_sequence.nextval, '이사랑', 2801);
commit;
select * from cp_test_emp;
select * from user_sequences where sequence_name='TEST_SEQUENCE';
#출력결과#
=> empno(시퀀스 사용 부분)이 insert한 순서대로 부여된 것 확인!
=> user_sequences 딕셔너리에서 조회하면 만든 시퀀스를 조회할 수 있음
#시퀀스 삭제
--시퀀스 삭제
drop sequence test_sequence;
#출력결과#
=> 삭제완료!
'Oracle' 카테고리의 다른 글
[Oracle] alter (0) | 2021.09.29 |
---|---|
[Oracle] 제약사항 (Constraint) (0) | 2021.09.28 |
[Oracle] union / join / driving table (0) | 2021.09.26 |
[Oracle] subquery / Scalar subquery / inline view (0) | 2021.09.24 |
[Oracle] function(함수) (0) | 2021.09.20 |