1) 정의
2) 장점
3) 표현식
-- 사번, 이름, 직급명, 부서명, 근무지역을 조회하고 그 결과를 V_RESULT_EMP라는 뷰로 생성
CREATE OR REPLACE VIEW V_RESULT_EMP
AS
SELECT
EMP_ID
, EMP_NAME
, JOB_NAME
, DEPT_TITLE
, LOCAL_NAME
FROM EMPLOYEE E
LEFT JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE)
LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID)
LEFT JOIN LOCATION L ON (D.LOCATION_ID = L.LOCAL_CODE);
4) 데이터 딕셔너리(DATA DICTIONARY)
5) 특징
CREATE OR REPLACE VIEW V_EMP
(
사번
, 이름
, 부서
)
AS
SELECT
EMP_ID
, EMP_NAME
, DEPT_CODE
FROM EMPLOYEE;
CREATE OR REPLACE VIEW V_EMP_JOB
(
사번
, 이름
, 직급
, 성별
, 근무년수
)
AS
SELECT
EMP_ID
, EMP_NAME
, JOB_NAME
, DECODE(SUBSTR(EMP_NO,8,1), '1', '남', '여')
, EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
FROM EMPLOYEE
JOIN JOB USING (JOB_CODE);
6) DML 명령어로 VIEW 조작이 불가능 한 경우
CREATE OR REPLACE VIEW V_JOB2
AS
SELECT J.JOB_CODE
FROM JOB J;
-- JOB_CODE에는 NULL이 삽입 될 수 없어 오류
INSERT
INTO V_JOB3
(
JOB_NAME
)
VALUES
(
'인턴'
);
INSERT
INTO V_JOINEMP
(
EMP_ID
, EMP_NAME
, DEPT_TITLE
)
VALUES
(
888
, '조세오'
, '인사관리부'
);
CREATE OR REPLACE VIEW V_GROUPDEPT
AS
SELECT E.DEPT_CODE
, SUM(E.SALARY) 합계
, AVG(E.SALARY) 평균
FROM EMPLOYEE E
GROUP BY E.DEPT_CODE;
-- GROUPING 해 놓은 형태이기 때문에 업데이트 불가
UPDATE
V_GROUPDEPT V
SET V.DEPT_CODE = 'D10'
WHERE V.DEPT_CODE = 'D1';
7) VIEW 옵션
OR REPLACE : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고 존재하지 않으면 새로 생성
FORCE : 서브 쿼리에 사용 된 테이블이 존재하지 않아도 뷰 생성
NOFORCE : 서브 쿼리에 테이블이 존재해야만 뷰 생성(기본값)
WITH CHECK OPTION
CREATE OR REPLACE VIEW V_EMP2
AS
SELECT
E.*
FROM EMPLOYEE E
WHERE MANAGER_ID = '200'
WITH CHECK OPTION;
-- 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다
UPDATE
V_EMP2
SET MANAGER_ID = '900'
WHERE MANAGER_ID = '200';
WITH READ ONLY