Oracle View란?

박현우·2024년 1월 19일
0

1. 뷰(view)
1-1. 뷰란?

  • 하나의 가상 테이블이라고 생각하면 된다.
  • 작업을 하다보면 자주 조회하는 데이터들이 있다. 한 테이블에 데이터가 있으면 조회하기 편하겠지만 그렇지 않은 경우가 있다.
  • 여러 테이블을 join하여 가져오고 쿼리가 복잡한 경우도 있다. 이런 경우 쿼리로 뷰를 만들어놓고 사용하면 편리하다.
  • 뷰는 보안에도 유리하다. 테이블에 데이터를 노출시키고 싶지 않을 때, 뷰를 사용해서 보여줄 데이터만 뷰로 제공할 수 있다.

1-2. 뷰의 사용 목적

  • 뷰를 만들어놓으면 복잡한 쿼리를 쉽게 작성 가능
  • 원하는 컬럼만 공개하여 원천 데이터 테이블 비공개 가능, 보안이 확보

1-3. 뷰의 특징

  • 원천 데이터가 변경되면 view 데이터도 자동으로 변경
  • 뷰의 검색은 자유로우나 삽입, 삭제, 수정에는 제약이 있다.
  • 뷰 생성 쿼리에 함수를 사용하면 반드시 alias를 지정해야 한다.
  • 데이터를 물리적으로 갖지 않지만 논리적인 집합을 갖는다.

-- 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
;

0개의 댓글

관련 채용 정보