Published 2022. 11. 24. 17:22

뷰를 이용한 DML (INSERT, UPDATE, DELETE) 가능 

뷰를 통해 조작했을 경우 실제 데이터에 담겨있는 "베이스테이블" 에 값이 반영됨

 

(예시) 

1)  JOB 테이블을 이용한 뷰 만들기 

CREATE OR REPLACE VIEW VW_JOB
AS SELECT JOB_CODE, JOB_NAME
     FROM JOB;

- 논리적인 테이블 : VW_JOB 
- 실제 데이터가 담겨있는 "베이스 테이블" : JOB 

2)  뷰를 통해 INSERT / UPDATE / DELETE

INSERT INTO VW_JOB VALUES('J8','인턴');

UPDATE VW_JOB
SET JOB_NAME = '알바'
WHERE JOB_CODE = 'J8';

DELETE FROM VW_JOB
WHERE JOB_CODE = 'J8';

 

>> 조작은 가능하지만 베이스테이블의 값도 같이 바뀜 


 * DML로 조작이 불가능한 경우가 더 많음 
    
    1) 뷰에 정의되어있지 않은 컬럼을 조작하려고 하는 경우 
    2) 뷰에 정의되어있지 않은 컬럼 중에 베이스테이블 상에 NOT NULL제약조건이 걸려있는 경우 
    3) 산술연산식 또는 함수식으로 정의되어있는 경우 
    4) 그룹함수나 GROUP BY절이 포함되어 있는 경우 
    5) DISTINCT(중복제거) 구문이 포함되어 있는 경우 
    6) JOIN을 이용해서 여러테이블을 연결시켜놓은 경우 

 

  1) 뷰에 정의되어있지 않은 컬럼을 조작하려고 하는 경우 

CREATE OR REPLACE VIEW V_JOB2
AS SELECT JOB_COD
	FROM JOB;
    
INSERT INTO V_JOB2 VALUES('J8','인턴')

>> 오류 : 뷰 정의에 포함되지 않은 걸럼을 INSERT/ UPDATE/ DELETE 하는 경우 에러발생 

 

2) 뷰에 정의되어있지 않은 컬럼 중에 베이스테이블 상에 NOT NULL제약조건이 걸려있는 경우 

CREATE OR REPLACE VIEW V_JOB3
AS SELECT JOB_NAME
   FROM JOB;
   
INSERT INTO V_JOB3 VALUES('인턴');

>> 오류 : 뷰에 포함되지 않은 NOT NULL제약 조건이  있는 컬럼이 존재하면 INSERT시 에러발생
             UPDATE/ DELETE는 가능 

 

3) 산술연산식 또는 함수식으로 정의되어있는 경우 

CREATE OR REPLACE VIEW VW_EMP_SAL
AS SELECT EMP_ID, EMP_NAME, SALARY*12"연봉", SUBSTR(EMP_NO,8,1)"성별"
	FROM EMPLOYEE;
    
UPDATE VW_EMP_SAL
SET 연봉 = 80000000
WHERE EMP_ID = 200;

>>  뷰에 산술계산식이 포함된 경우 INSERT/ UPDATE 시 에러 발생  
      DELETE는 가능 

 

 4) 그룹함수나 GROUP BY절이 포함되어 있는 경우 

CREATE OR REPLACE VIEW VW_GROUPDEPT
AS SELECT DEPT_CODE,SUM(SALARY)"합계",AVG(SALARY)"평균"
	FROM EMPLOYEE
    GROUP BY DEPT_CODE;
    
INSERT INTO VW_GROUPDEPT VALUES ('D10',6000000,4000000);

>> INSERT/ UPDATE/ DELETE 모두 에러 발생 

 

5) DISTINCT(중복제거) 구문이 포함되어 있는 경우 

CREATE OR REPLACE VIEW VW_DT_EMP
AS SELECT DISTINCT JOB_CODE
 	FROM EMPLOYEE;
    
INSERT INTO VW_DT_EMP VALUES('J9');
DELETE FROM VW_DT_EMP WHERE JOB_CODE = 'J1';

>> INSERT/ UPDATE/ DELETE 모두 에러 발생 

 

6) JOIN을 이용해서 여러테이블을 연결시켜놓은 경우 

CREATE OR REPLACE VIEW VW_JOINEMP
AS SELECT EMP_ID, EMP_NAME, DEPT_TITLE
	FROM EMPLOYEE
    JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
   
INSERT INTO VW_JOINEMP VALUES(888,'조세오','인사관리부');

>> INSERT/ UPDATE 시 에러발생 , 단 DELETE는 가능 

 

'ORACLE' 카테고리의 다른 글

ORACLE 12. OBJECT (SEQUENCE)  (0) 2022.11.25
ORACLE 11. OBJECT (VIEW) _ VIEW 옵션  (0) 2022.11.24
ORACLE 11. OBJECT (VIEW)  (0) 2022.11.24
ORACLE 10. TCL (COMMIT, ROLLBACK,SAVE POINT)  (0) 2022.11.24
ORACLE 09. DCL(GRANT, REVOKE)  (0) 2022.11.24
복사했습니다!