/*
view : 가상테이블
실체가 없는 테이블.
실제 저장되는 것이 아니다 => pointer
table <- view
한개의 view로 여러개의 table의 데이터를 검색하는 것이 가능하다.
속도가 빠르다. 검색용으로 많이 쓰인다.
제한을 설정할 수 있다. -> readonly
*/
CREATE VIEW ub_test_01(
job_id,
job_title,
min_salary
)
as
SELECT job_id, job_title, min_salary
FROM jobs;
SELECT * FROM ub_test_01; -- 창문을 통해서 검색
--데이터를명시하면 순서와상관없이 넣을수 있다
insert into ub_test_01
VALUES('DEVELOPER', '개발자', 10000);
SELECT * FROM jobs; -- 뷰를 통해 jobs테이블에 값을 삽입하였다.
ROLLBACK;
COMMIT;
DELETE from ub_test_01
where job_title= '개발자';
create table tb_test_02(
key_01 varchar2(10),
key_02 varchar2(10),
col_01 VARCHAR2(20),
col_02 VARCHAR2(20),
CONSTRAINT PK_TEST_02 PRIMARY KEY(KEY_01, KEY_02)
);
CREATE VIEW UB_TEST_02(
key_01,
key_02,
col_01,
CONSTRAINT PK_UB_TEST_02 PRIMARY KEY(KEY_01, KEY_02)
DISABLE NOVALIDATE
)
as
SELECT KEY_01, KEY_02, COL_01
FROM TB_TEST_02;
insert into ub_test_02(key_01, key_02, col_01)
values('AAA', 'aaa', '111');
insert into ub_test_02(key_01, key_02, col_01)
values('AAA', 'AAA', '111');
SELECT * FROM tb_test_02;
SELECT * FROM ub_test_02;
-- READONLY
-- 똑같은 오류의 데이터를 덧씌우는 OR REPLACE
CREATE OR REPLACE VIEW EMPVIEW(
"사원번호",
"성",
"이메일",
"입사일",
"업무",
CONSTRAINT PK_UB_EMP PRIMARY KEY("사원번호") DISABLE NOVALIDATE
)
as
SELECT employee_id, last_name, email, hire_date, job_id FROM employees
with READ ONLY; --데이터를 넣을수없다. 읽기 전용
SELECT
*
FROM empview;
insert into empview
VALUES(400, 'kim', 'kim@naver.com', sysdate, 'IT_PROG');
rollback;
create or replace view dept_emp_view
as
select e.employee_id, e.first_name, d.department_id, d.department_name, d.location_id from employees e, departments d
where e.department_id = d.department_id
with read only;
SELECT
*
FROM dept_emp_view;