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 |