DataBase/Oracle

12. Oracle View

유가엘 2020. 3. 30. 22:40

11.View.sql
0.00MB

View의 정의  

테이블과 유사하지만 저장하기 위한 물리적인 공간이 필요없는 가상의 테이블입니다.
데이터가 물리적인 공간을 차지않고 논리적 집합을 가집니다.
    
View의 사용은 는 크게 두가지 측면으로 나뉩니다.

보안 관리를 위하여 민감한 데이터를 보안등급에 맞춰 조회 할 수 있게 합니다.
테이블 명 , 혹은 컬럼 명을 숨김으로 결과만 제공하여 어떤 방식으로 출력되었는지 숨길 수 있습니다.
     
사용 편의성을 위하여 검색 조건을 단순화 하여 사용할 수 있습니다.


VIEW 의 기본 예제
VIEW 테이블 생성

CREATE VIEW V_EMP(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'ST_CLERK'; 

CREATE VIEW V_EMP1(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'SH_CLERK'; 

 

VIEW 테이블 제거

DROP VIEW V_EMP1; 

 

VIEW 테이블 수정

CREATE OR REPLACE VIEW V_EMP(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'ST_CLERK'; 

 

보안을 위한 View 테이블


VIEW 의 기본 예제

NVL로 설정하게 되면 해당 필드를 수정할 수 없도록 만들게 됩니다. 
CREATE VIEW V_EMP1(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, NVL(FIRST_NAME,NULL), JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'SH_CLERK'; 

-- V_EMP1의 FIRST_NAME 은 수정 할 수 없는 형태로 만들어 두었기때문에 ' 가상 열 사용 불가 ' 메시지가 출력됩니다. 
UPDATE V_EMP1 SET FIRST_NAME ='KYLE' WHERE FIRST_NAME = 'Julia'; 

 

COMMISSION_PCT 항목 중 NULL이 존재한다면 0으로 치환합니다.

CREATE VIEW V_EMP_SALARY(EMP_ID, LAST_NAME, ANNUAL_SAL) AS 
SELECT EMPLOYEE_ID, LAST_NAME, (SALARY+NVL(COMMISSION_PCT,0))*12 
FROM EMPLOYEES; 

SELECT * FROM V_EMP_SALARY;

 

읽기 전용 테이블의 생성
생성시 WITH READ ONLY 속성을 주게 된다면 수정 할 수 없도록 적용합니다.

CREATE VIEW V_EMP_READONLY(EMP_ID, LAST_NAME, ANNUAL_SAL) AS 
SELECT EMPLOYEE_ID, LAST_NAME, (SALARY+NVL(COMMISSION_PCT,0))*12 
FROM EMPLOYEES WITH READ ONLY; 

SELECT * FROM V_EMP_READONLY; 
-- ' 읽기 전용 뷰에서 DML 작업 수행 불가 ' 메시지가 출력됩니다. 
UPDATE V_EMP_READONLY SET LAST_NAME ='KYLE' WHERE LAST_NAME = 'Grant'; 

편의성을 위한 View 테이블

복잡한 SELECT 구문을 쉽게 검색할 수 있도록 만들 수 있습니다.

CREATE VIEW V_CUSTOM AS 
SELECT EMPLOYEE_ID, LAST_NAME , DEPARTMENT_ID ,HIRE_DATE  
FROM EMPLOYEES 
WHERE (SALARY+NVL(COMMISSION_PCT,0))*12 > 30000 
AND DEPARTMENT_ID = 50 
AND JOB_ID = 'ST_CLERK' 
AND SYSDATE - 365*5 > HIRE_DATE; 

SELECT * FROM V_CUSTOM; 

 

사용자의 편의성을 위해 한글로 만들 수도 있습니다.

CREATE VIEW 사원 (사번, 이름, 부서번호, 입사일 ) AS 
SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME , DEPARTMENT_ID, HIRE_DATE 
FROM EMPLOYEES 
WHERE DEPARTMENT_ID = 50; 

SELECT * FROM 사원; 

CREATE VIEW V_JOIN(사번, 이름, 부서번호, 부서명, 입사일) AS 
SELECT EMP.EMPLOYEE_ID, EMP.FIRST_NAME||' '||EMP.LAST_NAME , EMP.DEPARTMENT_ID,  
        DEPT.DEPARTMENT_NAME, EMP.HIRE_DATE 
FROM EMPLOYEES EMP, DEPARTMENTS DEPT 
WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID; 

SELECT * FROM V_JOIN;