VIEW 객체
- 뷰는 테이블과 유사한 객체
- 기존 테이블이나 또 다른 뷰로부터 SELECT문에 의하여 생성
- 사용
. 필요한 자료가 여러 테이블에 분산 저장된 경우
. 특정자료에 대한 접근을 제한하고자 할때
사용형식)
CREATE [OR REPLACE] VIEW 뷰이름[(컬럼list)]
AS
SELECT 문
[WITH READ ONLY]
[WITH CHECK OPTION];
. '(컬럼list)': 뷰에 적용될 걸럼명으로 생략되면 뷰 생성에 사용된 SELECT문의 SELECT절의
별칭이 사용되고 별칭이 없는 경우 SELECT절의 컬럼명이 뷰의 컬럼명이 됨
. 'WITH READ ONLY' : 읽기전용 뷰가되어 뷰를 대상으로 DML명령 사용금지 DML명령은 제한없이 사용 가능)
. 'WITH CHECK OPTION' : 뷰 생성에 사용된 SELECT문의 WHERE 조건절을 위배하는 값으로 뷰의 값을 갱신할 수 없다
(단, SELECT문의 WHERE 조건절을 만족할 때에는 변경 가능하며, 어느경우에나 원본 테이블은 제한없이 변경 가능하다)
. 'WITH READ ONLY'과 'WITH CHECK OPTION'은 동시 사용할 수 없다.
사용예) 회원테이블에서 마일리지가 30000이상인 회원의 회원번호,회원명,마일리지로 뷰를 생성하시오.
-- MID,MNAME,MILE
CREATE OR REPLACE VIEW V_MILEAGE(MID,MNAME,MILE)
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE>=3000
SELECT * FROM V_MILEAGE;
-- 회원번호,회원명,마일리지
CREATE OR REPLACE VIEW V_MILEAGE
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE>=3000;
SELECT * FROM V_MILEAGE;
-- MEM_ID,MEM_NAME,MEM_MILEAGE
CREATE OR REPLACE VIEW V_MILEAGE
AS
SELECT MEM_ID,MEM_NAME,MEM_MILEAGE
FROM MEMBER
WHERE MEM_MILEAGE>=3000;
SELECT * FROM V_MILEAGE;
**회원테이블의 '신용환'회원의 마일리지를 3500->1500으로 변경
UPDATE MEMBER
SET MEM_MILEAGE=1500
WHERE MEM_NAME='신용환';
SELECT MEM_ID,MEM_NAME,MEM_MILEAGE
FROM MEMBER
WHERE MEM_NAME='신용환';
SELECT * FROM V_MILEAGE;
--ROLLBACK;
--COMMIT;
**뷰(V_MILEAGE)의 '오철희(k001)'회원의 마일리지를 3700->1000으로 변경
UPDATE V_MILEAGE
SET MEM_MILEAGE = 1000
WHERE MEM_ID='k001';
SELECT * FROM V_MILEAGE;
SELECT MEM_ID,MEM_NAME,MEM_MILEAGE
FROM MEMBER
WHERE MEM_ID='k001';
--ROLLBACK;
--COMMIT;
(읽기 전용 뷰 생성)
CREATE OR REPLACE VIEW V_MILEAGE(MID,MNAME,MILE)
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE>=3000
WITH READ ONLY;
**뷰(V_MILEAGE)의 '오철희(k001)'회원의 마일리지를 3700->1000으로 변경
UPDATE V_MILEAGE
SET MILE = 1000
WHERE MID='k001';-- (X),뷰(V_MILEAGE)를 읽기 전용으로 생성했기 때문에 오류발생
**회원테이블에서의 '오철희(k001)'회원의 마일리지를 3700->1000으로 변경
UPDATE MEMBER
SET MEM_MILEAGE=1000
WHERE MEM_ID='k001';
SELECT * FROM V_MILEAGE;
--ROLLBACK;
--COMMIT;
'DBMS' 카테고리의 다른 글
[DBMS/Oracle] 동의어(SYNONYM) (0) | 2023.03.17 |
---|---|
[DBMS/Oracle] 시퀀스(SEQUENCE) (0) | 2023.03.17 |
[DBMS/Oracle] Window 분석함수 (0) | 2023.03.16 |
[DBMS/Oracle] 집합 연산자 (0) | 2023.03.16 |
[DBMS/Oracle] 서브쿼리(SUBQUERY) (1) | 2023.03.16 |