뷰의 동작 원리

사용자가 뷰에 대해서 질의를 하면 use_views에서 뷰에 대한 정의를 조회한다.

연결된 테이블에 대한 뷰의 접근 권한을 확인한다.

뷰에 대한 질의를 테이블 질의로 변환한다.

테이블에 대한 질의를 통해 데이터를 검색한다.

검색된 결과를 출력한다. 

 

뷰와 관련된 데이터 딕셔너리

데이터 딕셔너리 user_views 에 사용자가 생성한 모든 뷰에 대한 정의가 저장되어 있다. 

SQL> desc user_views
 이름                              널?         유형
 ------------------            --------  ----------------------- 
 VIEW_NAME(뷰 이름)             NOT NULL   VARCHAR2(30)
 TEXT_LENGTH(뷰의 문자열 길이)              NUMBER
 TEXT (뷰의 내용-> 텍스트)                  LONG
 TYPE_TEXT_LENGTH                          NUMBER
 TYPE_TEXT                                 VARCHAR2(4000)
 OID_TEXT_LENGTH                           NUMBER
 OID_TEXT                                  VARCHAR2(4000)
 VIEW_TYPE_OWNER                           VARCHAR2(30)
 VIEW_TYPE                                 VARCHAR2(30)
 SUPERVIEW_NAME                            VARCHAR2(30)
 EDITIONING_VIEW                           VARCHAR2(1)
 READ_ONLY (읽기 전용 확인)                 VARCHAR2(1)
 
SQL> select view_name,text_length,text from user_views;
 VIEW_NAME      TEXT_LENGTH     TEXT
--------------- -----------     ----------------------------------------
  V_EMP               49       select empno,ename,job from b_emp
                                where deptno=20

SQL> create view v_search as select view_name,text_length,text from user_views

SQL> select * from v_search;
VIEW_NAME       TEXT_LENGTH TEXT
--------------- ----------- ----------------------------------------
V_EMP                49     select empno,ename,job from b_emp
                            where deptno=20

V_SEARCH             49     select view_name,text_length,text from 
                            user_views

 

뷰와 연결되어 있는 테이블의 구조에 문제가 발생-> 뷰 실행 불가

//필드를 삭제하는 것이 아님,존재는 하지만 사용 불가
SQL> alter table b_emp set unused column ename;

//ename 필드를 더 이상 볼 수 없다,복구 불가
SQL> desc b_emp;

//뷰와 연결되어 있는 테이블의 구조에 문제가 발생하여 
//이를 실행시키는 뷰가 제대로 작동하지 않는다는 에러가 발생한다
//-> 복구 불가,이 뷰는 삭제해야한다.
SQL> select * from v_emp;

 

계정에서 작업한 결과물 확인(테이블, 뷰, 시노님)

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                           TABLE
                   ...
SALGRADE                        TABLE
V_EMP20                         VIEW

 

인라인 뷰 

sql문장에서 사용하는 서브쿼리의 일종으로 보통 from절에 위치해서 테이블처럼 사용한다.

 

ex) 사원 중 입사일이 가장 빠른 5명을 얻어 오는 질의문 작성(rownum 칼럼 이용)

( rownum: 화면에 출력할때 레코드 앞에 번호를 부여 )

SQL> select rownum,empno,hiredate 
from (select empno,hiredate from emp order by hiredate)
where rownum<=5;

 

 

 

+ Recent posts