: 뷰는 테이블에 대한 가상테이블로써 select로 조회된 데이터들의 가상테이블이다.
CREATE [OR REPLACE] VIEW 뷰이름 AS 서브쿼리; [ WITH CHECK OPTION ] [ WITH READ ONLY ] 예) CREATE VIEW EMP01 --수정하고싶을땐 --CREATE OR REPLACE VIEW EMP01 --의미 :없으면 생성 있으면 덮어씌우기 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP; / --실행 SELECT *FROM EMP01;
- 보안 설정
- 복잡하고 자주 사용되는 질의를 뷰를 통해서 쉽게 사용하기 위해
예1)
- 뷰생성 권한 부여하기
conn system/java1234 -- 뷰생성 권한 부여를 위해 system계정으로 접속 GRANT CREATE VIEW TO scott; -- scott계정에게 뷰생성 권한 부여 conn scott/tiger -- scott계정으로 접속
: 하나의 테이블로 생성되는 뷰(기본적으로 DML작업이 됨)
예1) CREATE OR REPLACE VIEW EMP01 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP; / INSERT INTO EMP01 VALUES(2000,'이씨',1000,10) --뷰에 데이터 추가=> 원본 테이블에도 적용됨 SELECT * FROM EMP; 예2) CREATE OR REPLACE VIEW EMP01 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WITH READ ONLY; / INSERT INTO EMP01 VALUES(2001,'이씨',1000,10); --오류발생 --오류 보고 - --SQL 오류: ORA-42399: 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다. --42399.0000 - "cannot perform a DML operation on a read-only view"
: 두 개이상의 테이블로 생성되는 뷰(조인된 뷰).DML작업을 못함
CREATE OR REPLACE VIEW EMP02 AS SELECT E.EMPNO,E.ENAME,D.DNAME,D.DEPTNO FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNOL / SELECT * FROM EMP02; INSERT INTO EMP02 VALUES(2003,'D','부서1',60); --오류발생 --오류 보고 - SQL 오류: ORA-01776: 조인 뷰에 의하여 하나 이상의 기본 테이블을 수정할 수 없습니다. 01776. 00000 - "cannot modify more than one base table through a join view" *Cause: Columns belonging to more than one underlying table were either inserted into or updated. *Action: Phrase the statement as two or more separate statements. DROP VIEW EMP02;
형식)
DROP VIEW 뷰이름;
Q1. EMP테이블과 DEPT테이블을 이용해서 이름,직업,부서,부서명을 조회하는
뷰를 만들고 사용해 보세요.
사용후 뷰 삭제하기CREATE OR REPLACE VIEW EMP04 AS SELECT E.ENAME,E.JOB,D.DEPTNO,D.DNAME FROM EMP E INNER JOIN DEPT D --조인 사용 WHERE E.DEPTNO=D.DEPTNO; / SELECT*FROM EMP04; DROP VIEW EMP04;
Q3.
CREATE OR REPLACE VIEW EMP01 AS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WHERE DEPTNO>=20 WITH CHECK OPTION --뷰의 조건에 맞는 데이터만 DML할 수 있음 / SELECT * FROM EMP01; SELECT * FROM EMP; INSERT INTO EMP01 VALUES(11,'홍',1000,20); --가능 INSERT INTO EMP01 VALUES(13,'홍',1000,10); --뷰의 조건에 맞지 않으므로 에러 --오류 보고 - ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다