1. 뷰(view)
1-1. 뷰란?
1-2. 뷰의 사용 목적
1-3. 뷰의 특징
-- 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 e
WHERE job_id = 'ST_CLERK'
;
-- VIEW 보기
SELECT * FROM V_EMP ve ;
CREATE VIEW v_emp2(
emp_id, first_name, job_id, hire_date, dept_id
) AS
SELECT employee_id, first_name, job_id, hire_date, department_id
FROM EMPLOYEES e
WHERE job_id = 'ST_CLERK'
;
-- VIEW 삭제
DROP VIEW V_EMP2 ;
-- REPLACE. 원래 있던 뷰가 있다면 대체할 때 사용 가능. 원래 뷰가 없어도 사용 가능
CREATE OR REPLACE VIEW V_EMP3 (
emp_id, first_name, job_id, hiredate, cms_pct
) AS
SELECT employee_id, first_name, job_id, hire_date, NVL(commission_pct, 0)
FROM EMPLOYEES e
;
SELECT *
FROM V_EMP3 ve
WHERE EMP_ID = 139
;
-- 오류 : ORA-01733: virtual column not allowed here
-- 함수로 작성된 부분은 수정이 불가
UPDATE V_EMP3 SET CMS_PCT = 0.5
WHERE EMP_ID = 139
;
v_emp_salary
emp_id, last_name, salary, annual_sal
annual_sal : (salary + nvl(commission_pct, 0)salary)12
CREATE VIEW v_emp_salary (
emp_id, last_name, salary, annual_sal
) AS
SELECT employee_id, last_name, salary, (salary + nvl(commission_pct, 0)*salary)*12
FROM EMPLOYEES e
;
-- King
-- UPDATE V_EMP_SALARY SET LAST_NAME = 'King'
WHERE EMP_ID = 100;
;
SELECT * FROM EMPLOYEES e WHERE EMPLOYEE_ID = 100;
-- WITH READ ONLY
CREATE VIEW v_emp_salary2 (
emp_id, last_name, salary, annual_sal
) AS
SELECT employee_id, last_name, salary, (salary + nvl(commission_pct, 0)*salary)*12
FROM EMPLOYEES e
WITH READ ONLY
;
-- 오류: ORA-42399: cannot perform a DML operation on a read-only view
UPDATE V_EMP_SALARY2 SET LAST_NAME = 'King'
WHERE EMP_ID = 100;
view 이름: v_join
view 컬럼: 사번, 이름(first_name last_name), 부서번호, 부서명, 입사일
단, 동일한 이름의 view가 존재할 때 해당 뷰로 대체 생성
CREATE OR REPLACE VIEW V_JOIN (
사번, 이름, 부서번호, 부서명, 입사일
) AS
SELECT e.employee_id, e.first_name || ' ' || e.last_name, e.department_id, d.department_name, e.hire_date
FROM EMPLOYEES e
LEFT OUTER JOIN DEPARTMENTS d
ON e.department_id = d.department_id
;