-
oracle 뷰DataBase/oracle 2020. 3. 21. 17:58
View : table 과 유사하며 테이블처럼 사용한다
테이블과는 달리 데이터를 저장하기위한 물리적은 공간이 필요하지않은 가상테이블(vitual table)이다
데이터를 물리적으로 갖지 않지만 논리적인 집합을 갖는다!
테이블과 마찬가지로 select , insert, update, delete 명령이 가능하다
뷰를 생성할 때 create 명령으로 생성한다
View 의 활용이유
1) 보안관리를 위한 뷰
보안 등급에 맞춰서 컬럼 및 범위를 정하여 조회 하도록 함
연산 결과만 제공하고 알고리즘을 숨기기 위해 사용
selectList 를 함수로 가공하여 update, insert를 못하도록 함
테이블 명이나 컬럼 명을 숨기도록 함
2) 사용편의성을 위한 뷰
검색 조건을 단순화하여 사용할 수 있도록 함
조인을 단순화
사용자를 위한 컬럼명이나 테이블명 제공
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889/* View */create view v_emp( emp_id, first_name, job_id, hiredate, dept_id )asselect employee_id, first_name, job_id, hire_date,department_id -- 논리적인 집합 시작from employeeswhere job_id = 'ST_CLERK';--v_emp 의 데이터는 어느 물리적 공간에 존재하는게 아니라 논리적인 집합 형태로 존재한다...?!create view v_emp1( emp_id, first_name, job_id, hiredate, dept_id )asselect employee_id, first_name, job_id, hire_date,department_idfrom employeeswhere job_id = 'SH_CLERK';-- 1) view 조회select * from v_emp;--2) view 제거drop view v_emp1;--3) view 수정create or replace view v_emp( emp_id, first_name, job_id, hiredate, dept_id )asselect employee_id, first_name, job_id, hire_date,department_idfrom employeeswhere job_id = 'SH_CLERK';--4) 함수를 사용하여 값수정을 못하게-- nvl(employee_id, null) :: 함수를 써서 수정할 수 없게 하겠다!!!create or replace view v_emp3( emp_id, first_name, job_id, hiredate, dept_id )asselect nvl(employee_id, null), nvl(first_name,null), job_id, hire_date,department_idfrom employeeswhere job_id = 'SH_CLERK';desc v_emp3;update v_emp3 set first_name = 'kim' where first_name = 'Julia'; --에러-- SQL 오류: ORA-01733: virtual column not allowed here-- 01733. 00000 - "virtual column not allowed here"update v_emp set first_name = 'kim' where first_name = 'Julia'; -- 실행, 수정됨--5) 연산과정을 숨기고 결과값만 보이기create view v_emp_salary (emp_id, last_namem, annual_sal) asselect employee_id, last_name, (salary + nvl (commission_pct, 0))*12from employees;select * from v_emp_salary;--6) read onlycreate view v_emp_readonly (emp_id, last_namem, annual_sal) asselect employee_id, last_name, (salary + nvl (commission_pct, 0))*12from employeeswith read only;desc v_emp_readonly;select * from v_emp_readonly;update v_emp_readonly set last_namem = 'KIM' where last_namem = 'Gietz';--SQL 오류: ORA-42399: cannot perform a DML operation on a read-only view--42399.0000 - "cannot perform a DML operation on a read-only view"--7) 사용자 편의성create view v_sample1 asselect employee_id, last_name, department_id ,hire_datefrom employeeswhere (salary + nvl( commission_pct, 0) ) *12 > 40000and department_id = 50and job_id = 'ST_CLERK'and sysdate - 365 * 5 > hire_date;select * from v_sample1;create view 사원 ( 사번, 이름, 부서번호, 입사일 )asselect employee_id, first_name||' '||last_name, department_id, hire_datefrom employeeswhere department_id = 50;SELECT * from 사원;create view v_join(사번,이름, 부서번호, 부서명, 입사일) asselect emp.employee_id, emp.first_name||' '||emp.last_name, emp.department_id,dept.department_name, emp.hire_datefrom employees emp, departments deptwhere emp.department_id = dept.department_id;select * from v_join;http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter'DataBase > oracle' 카테고리의 다른 글
oracle 계층형 쿼리 (0) 2020.03.22 oracle 시퀀스 (0) 2020.03.22 oracle 제약조건 (0) 2020.03.21 oracle DML (0) 2020.03.21 oracle create, drop, alter, truncate (0) 2020.03.19