1. VIEW
- 테이블과 유사한 객체(가상의 테이블)
- SELECT문의 결과 집합
- 테이블과는 독립적으로 사용됨
- VIEW는
. 필요한 정보가 여러 테이블에 분산되어 있는 경우
. 특정자료의 접근을 제어하는 경우
(사용형식)
CREATE [OR REPLACE] VIEW 뷰이름[(컬럼list)] -- CREATE <-> DROP
AS -- 컬럼LIST가 생략될 시 SELECT문의 이름을 사용
SELECT 문; -- 뷰가 변경되면 원본도 변경 됨
[WITH READ ONLY] -- > 뷰 값이 변경되지 않음
[WITH CHECK OPTION] -- CHECK, READ 둘 중에 하나만 사용 가능(동시에 사용 불가)
- '(컬럼list)':뷰에서 사용할 컬럼명. 생략하면 SELECT문의 컬럼 별칭이 뷰의 컬럼명이되고,
SELECT문에서 컬럼 별칭이 없는 경우 SELECT문의 컬럼명이 뷰의 컬럼명이 됨 - 'OR REPLACE' : '뷰이름'이 이미 존재하면 대치시키고 없으면 신규로 생성
- 'WITH READ ONLY' : 읽기전용 뷰 생성. 뷰를 대상으로 DML명령을 수행시킬 수 없음. 다만
원본테이블은 제한없이 DML명령 사용할 수 있으며, 원본테이블에서 변경사항은 즉시 뷰에 반영 - 'WITH CHECK OPTION' : 원본 SELECT문의 WHERE 조건을 위배하는 값으로 뷰의 내용을 변경하는
ML명령을 사용할 수 없다. 다만 원본테이블은 제한없이 DML명령 사용할 수 있으며,
원본테이블에서 변경사항은 즉시 뷰에 반영
사용예)회원테이블에서 마일리지가 3000이상인 회원의 회원번호,회원명,마일리지로 뷰를 생성하시오
CREATE OR REPLACE VIEW MEM_MILE_V1(MID,MNAME,MILEAGE)
AS
SELECT MEM_ID,MEM_NAME,MEM_MILEAGE
FROM MEMBER
WHERE MEM_MILEAGE>=5000;
SELECT * FROM MEM_MILE_V1;
**(원본테이블 내용이 변경)
회원테이블에서 'e001'회원의 마일리지를 9299에서 4000으로 변경하시오
UPDATE MEMBER
SET MEM_MILEAGE=4000
WHERE MEM_ID = 'e001';
**(뷰의 내용이 변경)
뷰(MEM_MILE_V1)에서 'x001'회원의 마일리지를 9791에서 2000으로 변경하시오
UPDATE MEM_MILE_V1
SET MILEAGE=2000
WHERE MID = 'x001';
SELECT * FROM MEM_MILE_V1;
SELECT MEM_ID,MEM_MILEAGE FROM MEMBER;
ROLLBACK;
COMMIT;
CREATE OR REPLACE VIEW MEM_MILE_V1
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE>=5000;
**테이블 복사
CREATE TABLE 테이블명
AS
SELECT 문;
CREATE TABLE CUSTOMERS
AS
SELECT * FROM MEMBER;
CREATE OR REPLACE VIEW MEM_MILE_V1
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM CUSTOMERS
WHERE MEM_MILEAGE>=5000;
SELECT * FROM MEM_MILE_V1;
사용예)MEM_MILE_V1 뷰에 회원번호 'a002', '홍길동',마일리지 3000 자료를 입력하시오
INSERT INTO MEM_MILE_V1 VALUES ('a002', '홍길동',3000);
CREATE OR REPLACE VIEW MEM_MILE_V2
AS
SELECT MEM_ID ,
MEM_NAME ,
MEM_MILEAGE
FROM CUSTOMERS
WHERE MEM_MILEAGE>=5000
WITH READ ONLY --뷰에만 적용
SELECT * FROM MEM_MILE_V2;
**CUSTOMERS에서 'p001'자료를 삭제 --테이블에서 삭제하면 뷰에서도 삭제 됨
DELETE FROM CUSTOMERS
WHERE MEM_ID='p001';
CREATE OR REPLACE VIEW MEM_MILE_V3
AS
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM CUSTOMERS
WHERE MEM_MILEAGE>=5000
WITH CHECK OPTION;
SELECT * FROM MEM_MILE_V3;
**뷰 MEM_MILE_V3에서 '이쁜이'회원의 마일리지를 10000으로 변경하시오
UPDATE MEM_MILE_V3
SET 마일리지 = 10000
WHERE 회원명 = '이쁜이'; --원본테이블의 WHERE조건을 만족하면 변경가능(원본테이블도 변경됨)
'ORACLE 복습 & 정리' 카테고리의 다른 글
[ORACLE] SEQUENCE,동의어 221130-02 (0) | 2022.11.30 |
---|---|
[ORACLE] 계층형 쿼리 221129-03 (0) | 2022.11.30 |
[ORACLE] 집합연산자 221129-02 (0) | 2022.11.29 |
[ORACLE] DML명령과 서브쿼리 221129-01 (0) | 2022.11.29 |
[ORACLE] 서브쿼리 221128-01 (0) | 2022.11.29 |