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 |