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;
'DataBase > Oracle' 카테고리의 다른 글
14. Oracle 계층형쿼리 (0) | 2020.03.30 |
---|---|
13. Oracle Sequence (0) | 2020.03.30 |
11. Oracle 무결성 제약조건 (0) | 2020.03.28 |
10. Oracle DML(Insert, Update, Delete) (0) | 2020.03.26 |
9. Oracle DDL(Table 정의) (0) | 2020.03.26 |