Oracle/개념

11장. SEQUENCE(시퀀스)와 SYNONYM(동의어)

2024. 6. 15. 00:53
728x90

1. SEQUENCE (시퀀스)

 SEQUENCE(시퀀스)란 순서라는 뜻이다. 고유한 숫자 값을 생성하는 객체이다. 은행의 대기표라 생각하면 된다. 순차적으로 값을 증가시킨다. 순차적인 값을 제공할 수 있도록 한다. 비슷한 예시는 Insert할 때 자동으로 일련 번호가 나갈 수 있도록 하는 것이다. 이때 속성 값 중 NEXTVAL(일정 값을 증가시켜줌)와 CURRVAL(현재 시퀀스 번호)를 꼭 참고해야 한다.

 

CREATE SEQUENCE sequence_name

# 시퀀스 번호의 증가 값으로 기본값은 1
[INCREMENT BY n]

# 시퀀스 시작 번호로 기본값은 1
[START WITH n]

# 생성 가능한 시퀀스 최대값
[MAXVALUE n | NOMAXVALUE]

# CYCLE일 경우 새로 시작되는 값과 감소하는 시퀀스일 경우 최소값
[MINVALUE n | NOMINVALUE]

# 시퀀스 번호를 순환 사용할 것인지 지정
[CYCLE | NOCYCLE]

# 시퀀스 생성 속도를 개선하기 위해 캐싱 여부 지정
[CACHE n | NOCACHE]

 

 

 

1) SEQUENCE 생성 및 각종 옵션 테스트하기

SEQUENCE 생성

# 기본 시퀀스 생성
CREATE SEQUENCE my_sequence;


# 다양한 옵션을 사용한 시퀀스 생성
CREATE SEQUENCE my_sequence

START WITH 100 # 시퀀스의 시작 값 (기본값: 1)
INCREMENT BY 10 # 시퀀스의 증가 값 (기본값: 1)
MINVALUE 50 # 시퀀스의 최소 값 (기본값: 1)
MAXVALUE 1000 # 시퀀스의 최대 값 (기본값: 28자리 숫자)
CYCLE # 최대 값에 도달하면 시퀀스를 다시 시작 (기본값: NOCYCLE)
CACHE 20; # 메모리에 시퀀스 값을 미리 할당하여 성능 향상 (기본값: 20)

 

 

시퀀스 옵션 테스트

CREATE SEQUENCE test_seq
START WITH 1
INCREMENT BY 5;

# 시퀀스 증가 값 테스트
SELECT test_seq.NEXTVAL FROM dual; # 1
SELECT test_seq.NEXTVAL FROM dual; # 6
SELECT test_seq.NEXTVAL FROM dual; # 11
CREATE SEQUENCE cycle_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 3
CYCLE;


# 시퀀스 CYCLE 옵션 테스트
SELECT cycle_seq.NEXTVAL FROM dual; # 1
SELECT cycle_seq.NEXTVAL FROM dual; # 2
SELECT cycle_seq.NEXTVAL FROM dual; # 3
SELECT cycle_seq.NEXTVAL FROM dual; # 1 (다시 시작)
CREATE SEQUENCE cache_seq
START WITH 1
INCREMENT BY 1
CACHE 10;

# 시퀀스 CACHE 옵션 테스트
# 여러 번 값 요청
SELECT cache_seq.NEXTVAL FROM dual;
SELECT cache_seq.NEXTVAL FROM dual;
SELECT cache_seq.NEXTVAL FROM dual;

 

 

 

2) 값이 감소하는 SEQUENCE 생성 및 사용하기

SCOTT>CREATE SEQUENCE jno_seq_rev
  2  INCREMENT BY -2
  3  MINVALUE 0
  4  MAXVALUE 20
  5  START WITH 10 ;

 

 

 

3) SEQUENCE 초기화하기

CREATE OR REPLACE PROCEDURE 테이블
(
	SNAME IN VARCHAR2
)
IS
	VAL NUMBER;
BEGIN
    EXECUTE IMMEDIATE 'SELECT ' || SNAME || '.NEXTVAL FROM DUAL ' INTO  VAL;
    EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || SNAME || ' INCREMENT BY -' || VAL || ' MINVALUE 0';
    EXECUTE IMMEDIATE 'SELECT ' || SNAME || '.NEXTVAL FROM DUAL ' INTO VAL;
    EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || SNAME || ' INCREMENT BY 1 MINVALUE 0';
END;

 

 

 

4) SEQUENCE 조회 및 수정하기

# SEQUENCE 조회
COL name FOR a숫자;

SELECT 컬럼1, 컬럼2, 컬럼3, ···
FROM 테이블
WHERE 컬럼_이름=데이터;
# SEQUENCE 수정
ALTER SEQUENCE 컬럼
MAXVALUE 숫자
CACHE 10;

 

 

 

5) SEQUENCE 삭제하기

DROP SEQUENCE jno_seq;

 

 

 

 

 


 

 

 

 

 

2. SYNONYM (시노뉨-동의어)

 

 같은 그룹일 때 용어를 정리하기 위해 그룹 내에서 별칭을 정한다.

 

1) 종류와 생성 문법

CREATE [PUBLIC] SYNONYM synonym_name
FOR [schema.]대상객체;
CONN / AS SYSDBA
# Connected

GRANT create synonym TO scott;
GRANT create public synonym TO scott;

CONN scott/tiger
# Connected

 

* public : 허가된 그룹 내에서의 동의어가 결정이 된다.

 

 

 

2) 생성 예

CREATE SYNONYM e FOR emp;
CREATE PUBLIC SYNONYM d2 FOR dept;

 

 

 

3) SYNONYM 조회하기

SELECT synonym_name, table_owner, table_name
FROM user_synonyms
WHERE table_name='EMP';
# 위와 같이 user_synonyms를 조회하면 PUBLIC SYNONYM은 보이지 않는다.
# PUBLIC SYNONYM은 dba 권하느으로 로그인한 후 조회하면 보인다.

CONN / AS sysdba
# Connected

 

 

 

4) SYNONYM 삭제하기

DROP SYNONYM synonym_name;

'Oracle > 개념' 카테고리의 다른 글

10장. Sub Query (서브 쿼리)  (0) 2024.06.14
9장. VIEW(뷰)  (0) 2024.06.14
8장. INDEX (인덱스)  (1) 2024.06.14
7장. Constraint(제약조건)  (0) 2024.06.13
6장. DML 데이터 관리  (0) 2024.06.13