[오라클 SQL 강좌] 뷰 (View) :: 소림사의 홍반장!

[오라클 SQL 강좌] 뷰 (View)

2012. 8. 28. 16:01 - 삘쏘굿

뷰 (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

참고>> http://oracleclub.com/lecture/1036

다른 카테고리의 글 목록

Dev. 데이터베이스/Oracle 관련 카테고리의 포스트를 톺아봅니다