[Oracle] view

hi·2022년 1월 19일
0

view?

하나 이상의 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블

  • 디스크 저장 공간이 할당되지 않음
  • 실질적으로 데이터를 저장하지 않고 뷰를 정의할 때 기술한 쿼리문만 저장
  • 뷰를 정의하기 위해 사용된 테이블 : 기본 테이블
  • 별도의 기억 공간이 존재 x 👉 뷰에 대한 수정 결과는 뷰를 정의한 기본 테이블에 적용
    기본 테이블의 데이터 변경 👉 뷰에 반영
create [or replace] [force | noforce(기본값)]
view 뷰이름 [(컬럼명, 컬럼명1...)] 
as 서브쿼리
[with check option [constraint 제약조건명]]
[with read only];

[ ] 항목은 생략 가능

1) 뷰 생성

컬럼명

  • 기본 테이블의 컬럼명과 다르게 지정할 경우 사용
  • 컬럼명 명시 :
    산술식, 함수 or 상수에서 파생된 경우, 조인 사용시 같은 이름을 갖는 경우

2) 뷰 종류

단순 뷰

: 하나의 기본 테이블로 생성한 뷰

  • DML 명령문 실행 가능 (처리 결과는 기본 테이블에 반영)

복합 뷰

: 두 개 이상의 기본 테이블로 생성한 뷰

  • distinct , 그룹함수 , group by , rownum 포함 불가
  • 함수 등을 사용시 별칭 필수

3) 뷰의 필요성

  • 뷰를 사용하는 이유 : 보안 , 사용의 편의성

  • 일반 사용자에게 해당 뷰만 접근 가능하도록 허용하여 중요한 데이터가 외부에 공개되는 것을 방지

  • 정보 접근을 편리하게 하기 위해 뷰를 통해 사용자에게 필요한 정보만 선택적으로 제공

3) 뷰의 처리과정

  • 뷰는 가상 테이블이므로 실체가 없음
  • user_views 데이터 사전에 사용자가 생성한 모든 뷰에 대한 정의 저장
  1. 뷰에 질의를 하면 오라클 서버는 user_views에서 뷰를 찾아 서브 쿼리문 실행
  2. '서브 쿼리문'은 기본 테이블을 통해 실행된다

4) 다양한 뷰

  • 함수를 사용하여 뷰 생성 가능

  • 그룹함수는 물리적인 컬럼이 존재하지 않고 결과를 가상 컬럼처럼 사용 👉 가상 컬럼은 기본 테이블에서 컬럼명 상속 불가 👉 컬럼 별칭 필수

  • 그룹함수를 가상 컬럼으로 갖는 뷰는 DML문 사용 불가

5) 뷰 제거

drop view 뷰이름;

  • user_views 데이터 사전에 뷰의 정의를 제거하는 것을 의미
  • 뷰를 제거해도 기본 테이블의 구조나 데이터에는 영향 x

다양한 뷰 옵션

1) OR REPLACE

  • 이미 존재하는 뷰 - 내용을 새롭게 변경
    존재하지 않은 뷰 - 뷰 새롭게 생성

  • create view : 뷰를 새롭게 생성할 때만 사용
    👉 create or replace view 를 사용하여 융통성 있게 뷰 생성

2) FORCE

  • 기본 테이블의 존재 유무에 상관없이 뷰 생성
  • NOFORCE : 반드시 기존 테이블이 존재할 경우에만 뷰 생성

3) WITH CHECK OPTION

  • 해당 뷰를 통해서 볼 수 있는 범위 내에서만 저장, 변경 가능
ex) '담당 업무가 manager'인 사원들을 조회하는 뷰 생성

create or replace view
as
select eno, ename, dno, job
from emp11
where job like 'MANAGER';  👈 조건


// '담당 업무가 SALESMAN'인 사원 추가
insert into veiw values(1000, '이순신', 30, 'SALESMAN');


//조회
select * from veiw; 
select * from emp; 
👉 뷰에는 없으나 기본 테이블에는 추가가 됨

👉 이를 방지하기 위해
with check option 사용하여 기본 테이블에도 추가될 수 없게 한다


======================================================


create or replace view2
as
select eno, ename, dno, job
from emp
where job like 'MANAGER' with check option; 👈 체크 옵션 추가


// '담당 업무가 SALESMAN'인 사원 추가 👉 실패
insert into view2 values(1000, '이순신', 30, 'SALESMAN'); 


// '담당 업무가 MANAGER'인 사원 추가 👉 성공
insert into view2 values(1100, '김유신', 30, 'MANAGER'); 


💡 with check option 
: 조건 제시를 위해 사용한 컬럼 값이 아닌 값에 대해서는 
  뷰를 통해서 추가/변경하지 못하도록 막음

3) WITH READ ONLY

  • 해당 뷰를통해서는 select만 가능
  • DML(insert , update , delete) 불가

0개의 댓글