몰입하며 나아가는 개발이란

Language/SQL

Oracle SQL VIEW

류하을 2019. 12. 21. 18:13

VIEW

실체가 없는 가상테이블이며, c언어에서의 pointer 와 비슷한 역할을 수행한다.

한개의 view로 여러개의 table의 데이터를 검색하고 확인하는것이 가능하다는 장점이 있으며,

Oracle 개발자들은 view를 많이 만들어 놓고 사용하는 편이라고 한다.

데이터추가 수정에 제한을 설정할 수 있으며, null을 허용하지 않는 컬럼은 반드시 추가해주어야한다.

/* 
view : 가상테이블 vue
실체가 없는 테이블.
실제 저장되는 것이 아니다 => pointer

table <- view 뷰를 통해서 table을 볼 수 있다. 창틀과 같은 존재?
한개의  view로 여러개의 table의 데이터를 검색하는것이 가능하다.
오라클 개발자는 view를 많이 만들어 놓고 사용한다. 신용이 높고 검색속도가 빠르다. 제한을 설정할 수 있다.

뷰를 만들때 null을 허용하지 않는 컬럼을 넣어주어야한다.
*/

VIEW 생성 : 

CREATE VIEW UB_TEST_01(
job_id, job_title, min_salary
)AS
SELECT job_id, job_title, min_salary
FROM jobs; -- VIEW 생성

SELECT *
FROM UB_TEST_01; -- VIEW를 통해서 바라본 데이터

INSERT INTO UB_TEST_01
VALUES ('DEVELOPER', '개발자', 10000); -- VIEW 데이터를 넣음.

SELECT *
FROM jobs; -- VIEW에 데이터를 추가 하였으나, 실제 테이블 jobs 에도 데이터가 추가된것을 확인 할 수 있음.

ROLLBACK;
DELETE FROM UB_TEST_01 WHERE job_title = '개발자';

VIEW 생성 : 읽기전용

-- READONLY
CREATE OR REPLACE VIEW EMPVIEW( -- OR REPLACE 해당테이블명 그대로 재정의.
    "사원번호", "성", "이메일", "입사일", "업무", -- VIEW에서 COLUMN명 재정의.
    CONSTRAINT PK_UB_EMP PRIMARY KEY("사원번호") DISABLE NOVALIDATE)
AS
SELECT employee_id, last_name, email, hire_date, job_id
FROM employees
WITH READ ONLY; -- 읽기만 가능 설정.

INSERT INTO empview
VALUES(400, 'kim', 'kim@naver.com', sysdate, 'IT_PROG');
-- 오류 발생 확인 cannot perform a DML operation on a read-only view

SELECT *
FROM EMPVIEW;