본문 바로가기

Oracle/Oracle 기초

Oracle - View

반응형
/*
    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;
반응형