CREATE [OR REPLACE] [FORCE | NOFORCE[ VIEW view_name
 [(alias, alias, ...)]
 AS
 subquery
 [WITH CHECK OPTION]
 [WITH READ ONLY];

 

1. OR REPLACE

: 이미 존재하는 뷰에 대해서 그 내용을 새롭게 변경하여 재생성

: 존재하지 않는 뷰라면 뷰를 새롭게 생성

 

뷰 내용 변경하기

CREATE OR REPLACE VIEW V_EMP_JOB2
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_SECOND
WHERE JOB LIKE 'SALESMAN';

 

2. FORCE / NOFORCE

- FORCE : 기본 테이블의 존재 유무에 상관없이 뷰를 생성해야 할 경우 사용

- NOFORCE : 반드시 기존 테이블이 존재할 경우에만 뷰를 생성 (default 값)

 

기본 테이블이 존재하지 않아 뷰 생성에 실패 예

CREATE OR REPLACE VIEW V_EMP_NOTABLE
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_NOTABLE
WHERE JOB LIKE 'MANAGER';

 

FORCE 옵션으로 기존 테이블이 존재하더라도 뷰 생성하기

CREATE OR REPLACE FORCE VIEW V_EMP_NOTABLE
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_NOTABLE
WHERE JOB LIKE 'MANAGER';

 

USER_VIEWS 데이터 사전 조회

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'V_EMP_NOTABLE';

 

3. WITH CHECK OPTION

: 해당 뷰를 통해서 볼 수 있는 범위 내에서만 UPDATE 또는 INSERT가 가능

 

- 나쁜 예 (혼돈 초래)

담당 업무가 MANAGER인 사원들을 조회하는 뷰 생성하기

CREATE OR REPLACE VIEW V_EMP_JOB_NOCHK
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_SECOND
WHERE JOB LIKE 'MANAGER';

 

뷰에 사원을 추가하되 담당 업무를 SALESMAN으로 지정하기 (뷰를 통해서는 추가된 사원 정보 조회 불가)

INSERT INTO V_EMP_JOB_NOCHK
VALUES(9000, '김주현', 30, 'SALESMAN');

SELECT *
FROM V_EMP_JOB_NOCHK;

 

기본 테이블에서 추가된 사원 정보 조회하기

SELECT *
FROM EMP_SECOND;

 

- 좋은 예 (WITH CHECK OPTION 사용)

담당 업무가 MANAGER인 사원들을 조회하는 뷰 생성하기

CREATE OR REPLACE VIEW V_EMP_JOB_CHK
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_SECOND
WHERE JOB LIKE 'MANAGER' WITH CHECK OPTION;

 

뷰에 담당 업무가 SALESMAN인 사원 추가하기 (오류 발생)

INSERT INTO V_EMP_JOB_CHK
VALUES(9000, '김주현', 30, 'SALESMAN');

 

뷰에 담당 업무가 MANAGER인 사원 추가하기 (정상 작동)

INSERT INTO V_EMP_JOB_CHK
VALUES(9000, '김주현', 30, 'MANAGER');

SELECT *
FROM V_EMP_JOB_CHK;

 

4. WITH READ ONLY

: 해당 뷰를 통해서는 SELECT만 가능하며 INSERT, UPDATE, DELETE 사용 불가

 

담당 업무가 MANAGER인 사원들을 조회하는 뷰 생성하기

CREATE OR REPLACE VIEW V_EMP_JOB_READONLY
AS
SELECT ENO, ENAME, DNO, JOB
FROM EMP_SECOND
WHERE JOB LIKE 'MANAGER' WITH READ ONLY;

 

뷰에 담당 업무가 MANAGER인 사원 추가하기 (오류 발생)

INSERT INTO V_EMP_JOB_READONLY
VALUES(9000, '김주현', 30, 'MANAGER');

'SQL - Oracle > 11. 뷰 (VIEW)' 카테고리의 다른 글

Day 36 : Exercise - 뷰  (0) 2021.12.07
Day 36 : 뷰의 개념과 뷰 사용하기  (0) 2021.12.07

+ Recent posts