IT개발/Oracle Database2010. 9. 1. 06:50

오라클 - 뷰(View) : 가상 테이블(실제 데이터가 없고, Select문만 가지고 있다)

■ 뷰테이블의 목적

  • 긴 SQL구문을 짧은 뷰(View) 가상 테이블로 대체
  • 보안상의 이유로 필요한 필드만 읽어낼 수 있는 또 다른 가상 테이블 생성

예제) 보안상의 이유로 관리자 DBA 와 사원 DBA 가 보는 테이블을 다르게 설정한다. 

          관리자 DBA는 연봉 테이블에 접근
                 Select 이름, 나이, 연봉 From 사원테이블
          사원 DBA는 연봉 필드를 제외한 회원 테이블만 접근
                 Select 이름, 나이 From 사원뷰                 -- 연봉 필드 제외

Select문을 통한 데이터 출력

Select empno, ename, sal Frm emp where deptno = 10;

뷰 생성

Create View vw_emp
As
    Select empno, ename, sal From emp where deptno = 10;


뷰 생성 권한 부여 : 최고 관리자인 System으로 접근 후 권한 설정

Grant Create View To Scott;

* 형식 : Grant 권한속성 to 대상 유저;


뷰 관련 데이터 사전 : 사용자 뷰테이블에 대한 정보 확인

Select * From USER_VIEWS;


하나의 테이블을 사용한 뷰를 통한 데이터 입력

Insert Into vw_emp values(8000, 'ANGEL', 7000, 10);
Desc vw_emp1;

별칭 부여

Create Or Replace View vw_emp2(사원번호, 사원명, 급여, 부서번호)
As
Select empno, ename, sal, deptno from emp1;

Select * from vw_emp2;

집계 함수
Create view vw_sal
As
Select deptno, sum(sal) as "SalSum", avg(sal) as "SalAvg"
From emp1
Group By deptno;
Select * from vw_sal;

뷰 삭제

Drop View View명;


뷰 수정

Create Or Replace View명
As
    Select 문;


기본 테이블 없이 뷰를 생성하기 위한 Force 옵션

Create Or Replace Force view vw_notable
As
 Select문;

뷰 활용 : 2개의 테이블에서 조인

SQL> Create Table Domains
  2  (
  3     IDX Number(2) Primary Key,
  4     UserID VarChar2(30) Not Null
  5  );

SQL> Create Table UserProfiles
  2  (
  3     IDX Number(2) Not Null,
  4     Email VarChar2(100) Null
  5  );

SQL> Insert Into Domains Values(1, 'Administrator');

SQL> Insert Into UserProfiles Values(1, 'a@a.com');

SQL> Insert Into Domains Values(2, 'Guest');

SQL> Insert Into UserProfiles Values(2, 'g@g.com');

SQL> select Domains.IDX, Domains.UserID, UserProfiles.Email
  2  From Domains Join UserProfiles
  3     On Domains.IDX = UserProfiles.IDX
  4  ;

SQL> Create Or Replace View vw_Users
  2  As
  3  select Domains.IDX, Domains.UserID, UserProfiles.Email
  4  From Domains Join UserProfiles
  5     On Domains.IDX = UserProfiles.IDX
  6  ;

SQL> select * from vw_users;





 

Posted by 시티락