평행코드

VIEW 본문

Oracle Database

VIEW

나의 오류는 누군가 겪었던 오류 2023. 10. 23. 14:20

SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블
실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만
사용자는 테이블을 사용하는 것과 동일하게 사용 가능

 

예시

CREATE OR REPLACE VIEW V_EMPLOYEE
AS SELECT EMP_ID, EMP_NAME, DEPT_TITLE, NATIONAL_NAME
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON(DEPT_ID = DEPT_CODE)
LEFT JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
LEFT JOIN NATIONAL USING(NATIONAL_CODE);
SELECT * FROM V_EMPLOYEE;​
DML명령어로 VIEW 조작이 불가능한 경우

1. 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우

CREATE OR REPLACE VIEW V_JOB2
AS SELECT JOB_CODE
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 EMP_SAL
AS SELECT EMP_ID, EMP_NAME, SALARY,
(SALARY + (SALARY*NVL(BONUS, 0)))*12 연봉
FROM EMPLOYEE;
INSERT INTO EMP_SAL VALUES(800, ‘정진훈’, 3000000, 4000000);
* 뷰에 산술 계산식이 포함된 경우 INSERT/UPDATE 시 에러 발생
* 단 DELETE는 가능​

4. 그룹함수나 GROUP BY절을 포함한 경우

CREATE OR REPLACE VIEW V_GROUPDEPT
AS SELECT DEPT_CODE, SUM(SALARY) 합계, AVG(SALARY) 평균
FROM EMPLOYEE
GROUP BY DEPT_CODE;
INSERT INTO V_GROUPDEPT VALUES(‘D10’, 6000000, 4000000);
DELETE FROM V_GROUPDEPT WHERE DEPT_CODE = ‘D1’;
* 그룹함수 또는 GROUP BY를 사용한 경우 INSERT/UPDATE/DELETE 시 에러 발생​

5. DISTINCT를 포함한 경우

CREATE OR REPLACE VIEW V_DT_EMP
AS SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
INSERT INTO V_DT_EMP VALUES(‘J9’);
DELETE FROM V_DT_EMP WHERE JOB_CODE = ‘J1’;
* DISTINCT를 사용한 경우 INSERT/UPDATE/DELETE 시 에러 발생​

6. JOIN을 이용해 여러 테이블을 연결한 경우

CREATE OR REPLACE VIEW V_JOINEMP
AS SELECT EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
INSERT INTO V_JOINEMP VALUES(888, ‘조세오’, ‘인사관리부’);
* 뷰 정의 시 JOIN을 사용한 경우 INSERT/UPDATE 시 에러 발생
* 단 DELETE는 가능​

 

'Oracle Database' 카테고리의 다른 글

SEQUENCE  (0) 2023.11.02
DDL(ALTER, DROP)  (2) 2023.10.22
DML  (0) 2023.10.22
제약조건(CONSTRAINTS)  (2) 2023.10.09
조인문 (JOIN)  (0) 2023.09.28