10-1. VIEW

CHOISUJIN·2023년 1월 25일
0
post-thumbnail

📍 VIEW

논리적 가상 테이블
--> 테이블 모양을 하고 있지만, 실제로 값을 저장하고 있지는 않음!!

  • VIEW 사용 목적
  1. 복잡한 SELECT문을 쉽게 재사용하기 위해
  2. 테이블의 진짜 모습을 감출 수 있어 보안상 유리
  • VIEW 사용 시 주의사항
  1. 가상의 테이블이므로 ALTER 구문 사용 불가
  2. VIEW를 이용한 DML 사용 가능, BUT 많은 제약이 따르기 때문에 SELECT(조회) 용도로만 사용하는 것 권장

☑️ 작성법

CREATE [OR REPLACE][FORCE | NOFORCE] VIEW 뷰이름 [별칭]
AS SUBQUERY
[WITH CHECK OPTION][WITH READ ONLY];

  1. OR REPLACE 옵션 : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성
  2. FORCE / NOFORCE 옵션 --> 잘 안씀
    FORCE : 서브쿼리에 사용된 테이블이 존재하지 않아도 뷰 생성
    NOFORCE : 서브쿼리에 사용된 테이블이 존재해야만 뷰 생성(기본값)
  3. WITH CHECK OPTION 옵션 : 옵션을 설정한 컬럼의 값을 수정 불가능하게 함 --> 잘 안씀
  4. WITH READ ONLY 옵션 : 뷰에 대한 조회만 가능(DML 수행 불가)

그 전에 권한 부여 필수!
1) SYS 관리자 계정 접속
2) ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
3) GRANT CREATE VIEW TO kh;
VIEW 생성 구문 다시 실행

VIEW에 INSERT 시 가상의 테이블인 VIEW에 데이터가 삽입된 것 이 아님!
원본 테이블에 존재한다!
즉, VIEW를 이용한 DML 구문이 원본에 영향을 미친다!

VIEW에 INSERT 시 VIEW에 포함되지 않은 원본테이블의 컬럼은 NULL이 삽입되는데
만약 VIEW에 포함되지 않은 컬럼에 NOT NULL 제약조건이 설정되어 있는 경우 정상적인 INSERT가 진행되지 않는다!
==> VIEW의 본래 목적인 보여지는 것(조회)라는 용도에 맞게 사용하자 !!

  • WITH READ ONLY 옵션 사용
CREATE OR REPLACE VIEW V_DCOPY2
AS SELECT DEPT_ID, LOCATION_ID FROM DEPARTMENT
WITH READ ONLY; -- 읽기전용 VIEW 생성(SELECT만 가능)
profile
매일매일 머리 터지는 중 ᕙ(•̀‸•́‶)ᕗ

0개의 댓글