뷰 (View)
1. 뷰의 특징
- 뷰는 하나의 가상 테이블이라 생각하면 된다.
- 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할수 있다.
- 뷰는 복잡한 Query를 통해 얻을 수 있는 결과를 간단한 Query로 얻을 수 있게 한다.
- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.
- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.
- 오라클에서 뷰를 구성하는 컬럼의 최대 개수는 254개이다.
- 뷰에 대한 수정 결과는 뷰를 정의한 기본 테이블에 적용된다.
- 뷰를 정의한 기본 테이블의 데이터가 변경되면 뷰에도 반영된다.
- 뷰는 기본 테이블에서 정의된 모든 무결성 제약조건을 상속 받는다.
- 뷰에 대한 정의는 user_views 데이터 딕셔너리 테이블을 통해서 조회할 수 있다.
2. 뷰의 장단점
장점 | • DB의 선택적인 부분만 보여주므로 접근을 제한 |
---|---|
• 다양한 접근 경로 설정 | |
• 복잡한 질의를 단순화 | |
• 데이터의 독립성 제공 | |
• 동일한 데이터를 또 다른 뷰로 표현 | |
• 한 개의 뷰에 여러 테이블의 데이터를 검색 가능 | |
• 한 개의 테이블로부터 여러 뷰를 생성 가능 | |
단점 | • 뷰의 정의를 변경할 수 없고 insert,delete,update에 많은 제한이 있음 |
3. 뷰의 제한 조건
- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.
- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 INSERT 할 수 없다
- WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.
- WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제,수정을 할 수 있다
4. 뷰의 생성
【형식】
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름
[(alias[,alias]...]
AS subquery
[WITH CHECK OPTION]
[WITH READ ONLY];
옵션 | 설 명 |
---|---|
OR REPLACE | 같은 이름의 뷰가 있을 경우 무시하고 다시 생성 |
FORCE | 기본 테이블의 유무에 상관없이 뷰를 생성 |
NOFORCE | 기본 테이블이 있을 때만 뷰를 생성 |
ALIAS | 기본 테이블의 컬럼이름과 다르게 지정한 뷰의 컬럼명 부여 |
WITH CHECK OPTION | 뷰에 의해 access될 수 있는 행(row)만이 삽입, 수정 가능 |
WITH READ ONLY | DML 작업을 제한(단지 읽는 것만 가능) |
5. 뷰의 수정
뷰의 수정은 기존 뷰에 대한 정의를 삭제한 후 재생성하거나, CREATE 문에서 OR REPLACE 옵션을 이용하여 재정의할 수 있다.
뷰의 수정 결과는 user_views 데이터 딕셔너리에 저장된다.
【형식】 CREATE OR REPLACE VIEW 뷰이름 AS subquery;
【예제】
변경 후 | 변경 전 |
---|---|
SQL> select * from dno10_vw;
EMPNO ENAME HIREDATE DEPTNO
---------- ---------- ------------ ----------
7782 CLARK 09-JUN-81 10
7839 KING 17-NOV-81 10
7934 MILLER 23-JAN-82 10
SQL> | SQL> select * from dno10_vw;
ENAME JOB SAL DEPTNO
---------- --------- ---------- ----------
CLARK MANAGER 2450 10
KING PRESIDENT 5000 10
MILLER CLERK 1300 10
SQL> |
SQL> create or replace view dno10_vw
2 as select empno,ename,hiredate,deptno
3 from emp
4 where deptno=10;
View created.
SQL> | |
SQL> desc dno10_vw;
Name Null? Type
------------- -------- ------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
HIREDATE DATE
DEPTNO NUMBER(2)
SQL> | SQL> desc dno10_vw;
Name Null? Type
------------- -------- ------------------
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> |
6. 뷰의 삭제
뷰는 실체가 없는 가상 테이블이므로 뷰의 삭제는 user_views 데이터 딕셔너리에 저장된 뷰의 정의를 삭제하는 것을 의미한다.
따라서 뷰의 삭제는 뷰를 정의한 기본 테이블의 구조나 데이터에는 전혀 영향을 주지 않는다.
• 뷰의 삭제는 해당 뷰를 생성한 사용자나, DROP ANY VIEW 권한을 가진자만이 가능하다.
【형식】 DROP VIEW 뷰이름;
【예제】
SQL> drop view dno10_vw;
View dropped.
SQL> select * from user_views where view_name='DNO10_VW';
no rows selected
SQL>
참고>> http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/view.html
'Dev. 데이터베이스 > Oracle 관련' 카테고리의 다른 글
[오라클 SQL 강좌] 시퀀스 (Sequence) (0) | 2012.08.28 |
---|---|
데이터베이스 백업(Backup) 및 복구(Recovery) - 전체, 계정(스키마), 테이블 (0) | 2012.08.28 |
[ORACLE 강좌] 오라클 함수 - 분석함수 ( Analytic Functions ) (0) | 2012.08.22 |
[ORACLE 강좌] 오라클 함수 - ROLLUP, CUBE, GROUPING (6) | 2012.08.22 |
[ORACLE 강좌] 오라클 함수 - 집합함수 ( Aggregate functions ) (0) | 2012.08.22 |