-
[오라클] ORACLE VIEW(뷰) 사용법 및 예제SQL 2019. 10. 13. 20:36반응형
1. VIEW 란 무엇인가?
- 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된,
이름을 가지는 가상 테이블이다.
- 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
- 뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다.
- 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화 한다.
※ 뷰테이블이란 표현은 잘못된 표현 X 뷰쿼리가 맞는 표현 O
2. 뷰(View)의 특징
- 뷰는 기본테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.
- 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
- 데이터의 논리적 독립성을 제공할 수 있다.
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
- 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다.
- 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신, 연산이 가능하다.
- 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.
3. 뷰(View)사용시 장 단점
장점
- 논리적 데이터 독립성을 제공한다.
- 동일 데이터에 대해 동시에 여러사용자의 상이한 응용이나 요구를 지원해 준다.
- 사용자의 데이터관리를 간단하게 해준다.
- 접근 제어를 통한 자동 보안이 제공된다.
단점
- 독립적인 인덱스를 가질 수 없다.
- ALTER VIEW문을 사용할 수 없다. 즉 뷰의 정의를 변경할 수 없다.
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.
4. VIEW의 종류
- 단순뷰 : 하나의 TABLE에서 뽑아오며 함수를 사용안한다. DML(INSERT,UPDATE,DELETE)사용 가능
- 복합뷰 : 하나이상의 TABLE에서 뽑아오며 함수를 사용한다. JOIN, GROUP BY, HAVING 등등.. DML(INSERT,UPDATE,DELETE)사용 불가능
5. 각종 예제
- 뷰 생성
REATE VIEW SAMPLE_VIEW ASSELECT ID, NAME, USE_YNFROM SAMPLEWHERE USE_YN = 'Y';USE_YN컬럼의 값이 'Y' 인것만 조회 후 생성 ※ 테이블 조인등 사전에 조건들을 정의하고 생성하면 나중에 사용하기 쉽다.
- 뷰 조회
SELECT * FROM SAMPLE_VIEW;조회 결과
SELECT 문은 테이블과 뷰를 참조한다.
from절 오타로 인한 오류 중에 ORA-00942:테이블 또는 뷰가 없습니다. 라고 자주 볼 수 있다.
- 정의한 뷰 정보 확인
SELECT VIEW_NAME, TEXTFROM USER_VIEWS뷰를 생성SQL문을 확인 할 수 있다.
- 뷰 수정
CREATE OR REPLACE VIEW SAMPLE_VIEW ASSELECT ID, NAME, USE_YNFROM SAMPLEWHERE USE_YN = 'N';USE_YN의 조건을 Y에서 N으로 변경했다.
- 뷰 옵션( WITH CHECK OPTION / WITH READ ONLY)
1. WITH CHECK OPTION ( 조건으로 사용한 컬럼의 값을 변경하지 못하게 하는 옵션)
CREATE OR REPLACE VIEW SAMPLE_VIEW ASSELECT ID, NAME, USE_YN, REG_USER, MONEYFROM SAMPLEWHERE REG_USER = 'lee' WITH CHECK OPTION;위의 SQL 은 REG_USER의 컬럼에 이름이 lee 사람만 조회하여 생성했고 조건 뒤에 WITH CHECK OPTION옵션을 붙였다.
SELECT * FROM SAMPLE_VIEWSQL 조회 결과
UPDATE SAMPLE_VIEWSET REG_USER = 'kim'WHERE MONEY < 1300위의 업데이트문을 실행하면
오류 보고 - ORA-01402: view WITH CHECK OPTION where-clause violation 오류가 발생한다.
이유는 뷰를 생성할때 REG_USER의 값이 lee인 데이터를 조회하여 생성했는데,
그 중에 MONEY 컬럼의 데이터중 1300이하인 값들이 있기 때문에 위의 업데이트문을 막는다.
조건 외 다른 컬럼은 수정이 가능하다.
2. WITH READ ONLY (어떤 컬럼에 대해서도 뷰를 통한 내용 수정을 불가능하게 만드는 옵션)
CREATE OR REPLACE VIEW SAMPLE_VIEW ASSELECT ID, NAME, USE_YN, REG_USER, MONEYFROM SAMPLEWHERE REG_USER = 'lee' WITH READ ONLY;위의 SQL 은 REG_USER의 컬럼에 이름이 lee 사람만 조회하여 생성했고 조건 뒤에 WITH READ ONLY옵션을 붙였다.
UPDATE SAMPLE_VIEWSET USE_YN = 'N'WHERE REG_USER = 'lee'오류 보고 - ORA-42399: cannot perform a DML operation on a read-only view
어떠한 컬럼도 수정도 불가능하다.
반응형'SQL' 카테고리의 다른 글
스칼라 서브쿼리(Scala Subquery)란 ? (0) 2020.04.05 이퀴조인 (EQUI JOIN) 아우터 조인(Outer Join) (0) 2020.04.05 [오라클] WITH문 사용법 및 예제 (0) 2019.10.06 오라클 UNION, INTERSECT, MINUS (0) 2019.09.29 오라클 LOOP사용, 테이블에 테스트 데이터 넣기 (0) 2019.04.12