[Database/SQL]오라클 뷰와 시퀀스 사용하기~
뷰
물리적인 테이블에 근거한 논리적인 가상의 테이블
데이터가 없고 테이블의 대한 SQL만 저장되어 있다.
사용자가 VIEW에 접근할 경우 SQL이 수행되면서 그 결과를 가져온다.
여러 테이블에 대한 검색결과를 뷰 하나로 검색할 수 있다.
복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화할 수 있다.
뷰 문법
CREATE [ OR REPLACE][ FORCE | NOFORCE ] VIEW view_name
AS subquery
[ WITH CHECK OPTION [CONSTRAINT 제약조건]]
[ WITH READ ONLY ]
- CREATE : 뷰 생성
- CREATE OR REPLACE : 뷰를 생성하지만 같은 이름의 뷰가 있으면 질의가 변경된다
- FORCE : 기본 테이블 유무에 관계없이 뷰를 생성
- WITH CHECK OPTION : 제약조건에 맞는 데이터만 입력되거나 변경될 수 있다
- WITH READ ONLY : SELECT만 가능한 뷰 생성
뷰 정보 조회
USER_VIEWS 를 통해 뷰에 대한 정보를 조회 할 수 있다.
SELECT view_name, text
FROM user_view
WHERE view_name = '뷰이름';
시퀀스
테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생 객체
행을 구분하기 위한 고유값으로 기본키를 사용한다. 기본키는 중복되지 않은 유일한 값을 가져야 하는데 직접 값을 생성해내는 것이 사용자의 부담이
될 수 있다. 이럴 경우 시퀀스를 이용해 기본키로 지정을 한다.
그리고 시퀀스는 오라클에서 사용할 때, 아무값도 지정하지 않으면 2번째 숫자값부터 시작된다.
시퀀스 생성
CREATE SEQUENCE sequence_name
[ START WITH n]
[ INCREMENT BY n ]
[ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE | NOCYCLE ]
- START WITH : 시퀀스 시작 값
- INCREMENT BY : 시퀀스 증가 값
- MAXVALUE : 시퀀스 최대 값
- MINVALUE : 시퀀스 최소 값
- CYCLE : 최대값 도달 시 순환 여부
- CACHE : cache 여부, 원하는 숫자만큼 미리 만들어 캐시로 상주시킨다
시퀀스 활용
- 시퀀스 생성 및 확인
CREATE SEQUENCE seq_empno
START WITH 1000
INCREMENT BY 1
CACHE 20;
SELECT seq_empno.NEXTVAL FROM dual;
SELECT seq_empno.NEXTVAL FROM dual;
SELECT seq_empno.NEXTVAL FROM dual;
1000
1001
1002
- insert문에서 스퀀스 사용
INSERT INTO emp (empno, ename)
VALUES (seq_empno.nextval, 'TEST');
SELECT empno, ename FROM emp WHERE ename = 'TEST';
EMPNO ENAME
------ -------
1004 TEST
시퀀스 수정
START WITH 값을 제외한 다른 설정들을 수정할 수 있다.
ALTER SEQUENCE sequence_name
[ INCREMENT BY n ]
[ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE]
[ CYCLE | NOCYCLE ]
[ CACHE | NOCACHE ]
- 시퀀스 수정 예시
ALTER SEQUENCE seq_empno
INCREMENT BY 10
CACHE 40;
SELECT seq_empno.NEXTVAL FROM dual;
SELECT seq_empno.NEXTVAL FROM dual;
SELECT seq_empno.NEXTVAL FROM dual;
1010
1024
1034
시퀀스 삭제
DROP SEQUENCE 문으로 시퀀스를 삭제한다.
DROP SEQUENCE seq_empno;
이상으로 오라클에서 가상 뷰와 시퀀스를 사용하는 것에 대해서 공부해봤는데~ㅎㅎ
오라클에서 가상 뷰를 쓸 때는, 오라클 쿼리를 테스트하기 위해 많이 사용한다.
그리고 시퀀스는 오라클에서 테이블을 만들 때, 거의 필수적으로 사용하게 된다.
시퀀스를 사용하면 DB값이 중복되는 것을 없애주며 별도로 값을 관리하지 않아도 DB에서 알아서 관리하게 해준다.