Daily coding
Oracle day 7 - View 뷰 & 테이블 본문
VIEW
view : 가상 테이블
- 실체가 없는 테이블
- 실제 저장되는 것이 아님 => c언어 포인터와 비슷한 개념
- table <- view 로 접근
- 창문의 역할 : 뷰를 통해 테이블을 볼 수 있음
- 원하는 것만 뽑아서 볼 수 있음
- 한개의 뷰로 여러개의 테이블의 데이터를 검색하는 것이 가능
- 처리 속도가 빠름
- 제한을 설정할 수 있음 (READ ONLY)
- 데이터를 삽입할 때 무결성을 주의해서 데이터를 넣어야 함
- 검색용으로 많이 쓰임
1. View 생성하기
-- 기존 테이블의 데이터를 뽑아 카피한다
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; -- 창문을 통해서 검색함
2. View에 데이터 삽입하기
INSERT INTO ub_test_01
VALUES ('DEVELOPER', '개발자', 10000); -- 뷰에 데이터 삽입
-- 데이터를 삽입할 수는 있지만 실체가 없어서
-- 삽입된 데이터는 JOBS 테이블에 저장된다
-- 아래의 코드를 실행하면 방금 삽입한 데이터가 들어가있는 것을 알 수 있다
SELECT * FROM JOBS;
ROLLBACK; -- 커밋전에 수정하려면 롤백을 실행하면 된다.
COMMIT; -- 커밋후에 수정하려면 MODIFY나 UPDATE 예약어 또는 view 로 수정해야함
-- 테이블과 View 생성하기
CREATE TABLE TB_TEST02(
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 -- 제약조건 ( CONSTRAINT )이 없는것과 동일한 결과
) AS
SELECT KEY_01, KEY_02, COL_01
FROM TB_TEST02;
-- 데이터보기
SELECT * FROM TB_TEST02;
-- 뷰에 데이터를 삽입할 수 있음
INSERT INTO UB_TEST_02( KEY_01, KEY_02, COL_01)
VALUES ('AAA', 'aaa', '111');
-- 뷰에 저장되어있는 듯 보이지만 실제로는 뷰는 존재하지 않고 원본테이블에 데이터가 저장됨
SELECT * FROM UB_TEST_02;
3. READ ONLY
-- 뷰를 읽기 전용으로 만들 수 있음
* 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','MIN@NAVER.COM', SYSDATE, 'IT_PROG');
-- 에러발생 ( READ ONLY이기 때문 )
< 참고 >
* 두개의 테이블을 뷰를 통해 한꺼번에 취득이 가능
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;
'DB > Oracle' 카테고리의 다른 글
Oracle day 7 - view & sequence 문제 (0) | 2019.12.19 |
---|---|
Oracle day 7 - SEQUENCE 시퀀스 & SYNONYM 동의어 (0) | 2019.12.19 |
Oracle day 6 - DDL 연습문제 (scott) (0) | 2019.12.18 |
Oracle day 6 - DDL 연습문제 (hr) (0) | 2019.12.18 |
Oracle day 6 - 무결성과 무결성 제약조건 ( Key ) (0) | 2019.12.18 |