뷰(View)
- 하나또는 그 이상의 테이블이나 뷰를 기본으로 하는 논리적인 테이블
- 자체 데이터를 보관하지는 않는다
- 뷰의 기본이 되는 테이블은 Base Table이라고 한다.
- 오라클의 경우 뷰의 정의(쿼리의 텍스트)를 데이터 딧셔너리에 저장한다.
- 뷰를 만들기 위해서는 Create View 시스템 권한이 있어야 한다.
- 자체 데이터를 보관하지는 않는다
- 뷰의 기본이 되는 테이블은 Base Table이라고 한다.
- 오라클의 경우 뷰의 정의(쿼리의 텍스트)를 데이터 딧셔너리에 저장한다.
- 뷰를 만들기 위해서는 Create View 시스템 권한이 있어야 한다.
[문법]
CREATE [OR REPLACE] [FORCE|NO FORCE] VIEW view_name [(alias[,alias]...)]
AS Subquery
[WITH READ ONLY]
[WITH CHECK OPTION [CONSTRAINT constraint]];
CREATE [OR REPLACE] [FORCE|NO FORCE] VIEW view_name [(alias[,alias]...)]
AS Subquery
[WITH READ ONLY]
[WITH CHECK OPTION [CONSTRAINT constraint]];
[예제]
SQL> CREATE VIEW emp30
AS SELECT empno, ename, sal
FROM emp WHERE deptno = 30;
SQL> DESC emp30
SQL> SELECT * FROM emp30;
SQL> CREATE OR REPLACE VIEW emp30
(eno, name, payroll)
AS SELECT empno, ename, sal
FROM emp WHERE deptno = 30;
(eno, name, payroll)
AS SELECT empno, ename, sal
FROM emp WHERE deptno = 30;
- Simple View
하나의 테이블을 기본으로 뷰 생성
기본적으로 Insert, Update, Delete 가능
뷰가 Join condition , Aggregate Function, GROUP BY clause, DISTINCT을 포함하는 경우 삭제 불가
위 조건 외 __EXPRESSION__으로 정의된 Column을 포함하는 경우 Update 불가
추가로 View로 선택되지 않은 NOT NULL Column을 포함하는 경우에는 Insert 불가
기본적으로 Insert, Update, Delete 가능
뷰가 Join condition , Aggregate Function, GROUP BY clause, DISTINCT을 포함하는 경우 삭제 불가
위 조건 외 __EXPRESSION__으로 정의된 Column을 포함하는 경우 Update 불가
추가로 View로 선택되지 않은 NOT NULL Column을 포함하는 경우에는 Insert 불가
- Complex View
여러 테이블로 뷰 규성
기본적으로 Insert, Update, Delete 불 가능
기본적으로 Insert, Update, Delete 불 가능
- 업데이트 가능한 조인 뷰
여러테이블 또는 뷰로 구성
Insert, Update, Delete 가능
USER_UPDATABLE_COLUMNS 뷰를 통해서 업데이트 가능한 조인 뷰의 컬럼들을 알 수 있다.
Insert, Update, Delete 가능
USER_UPDATABLE_COLUMNS 뷰를 통해서 업데이트 가능한 조인 뷰의 컬럼들을 알 수 있다.
- 인라인뷰(Inline View)
스키마 오브젝트는 아님
SQL 문장안에서 마치 뷰처럼 사용되는 서브 쿼리
SQL 문장안에서 마치 뷰처럼 사용되는 서브 쿼리
[실습]
SQL> CREATE TABLE viewtest
AS SELECT id, last_name, dept_id FROM s_emp;
AS SELECT id, last_name, dept_id FROM s_emp;
SQL> CREATE OR REPLACE VIEW viewtest_v41 (empno,
empname,deptno)
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41
WITH READ ONLY;
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41
WITH READ ONLY;
SQL> UPDATE viewtest_v41 SET empname = 'XXXX';
(* 에러 발생)
(* 에러 발생)
SQL> CREATE OR REPLACE VIEW viewtest_v41 (empno,
empname,deptno)
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41;
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41;
SQL> UPDATE viewtest_v41 SET empname = 'XXXX';
SQL> SELECT * FROM viewtest_v41;
SQL> SELECT * FROM viewtest;
SQL> CREATE OR REPLACE VIEW viewtest_v41
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41
WITH CHECK OPTION CONSTRAINT viewtest_v41_ck;
AS SELECT id, last_name, dept_id
FROM viewtest WHERE dept_id = 41
WITH CHECK OPTION CONSTRAINT viewtest_v41_ck;
SQL> SELECT * FROM viewtest_v41;
SQL> UPDATE viewtest_v41 SET dept_id = 31;
(* 에러 발생)
(* 에러 발생)
SQL> INSERT INTO viewtest_v41 VALUES ( 1000, 'AAAA', 1000);
(* 에러 발생)
(* 에러 발생)
SQL> INSERT INTO viewtest_v41 VALUES ( 2000, 'AAAA', 41);
SQL> SELECT * FROM viewtest_v41;
SQL> INSERT INTO (SELECT id, last_name, dept_id FROM s_emp
WHERE dept_id=31 WITH CHECK OPTION) VALUES (62, user,32);
(* 에러 발생. )
WHERE dept_id=31 WITH CHECK OPTION) VALUES (62, user,32);
(* 에러 발생. )
SQL> UPDATE(SELECT id, last_name, dept_id FROM s_emp
WHERE dept_id=31 WITH CHECK OPTION) SET last_name = 'yyyy' WHERE id = 60;
WHERE dept_id=31 WITH CHECK OPTION) SET last_name = 'yyyy' WHERE id = 60;
SQL> UPDATE(SELECT id, last_name, dept_id FROM s_emp
WHERE dept_id=31 WITH CHECK OPTION) SET dept_id = 32;
(* 에러 발생.)
WHERE dept_id=31 WITH CHECK OPTION) SET dept_id = 32;
(* 에러 발생.)
- 작성 한 뷰 조회
SELECT object_name, created, status
FROM user_objects
WHERE object_type = 'VIEW';
FROM user_objects
WHERE object_type = 'VIEW';
SELECT view_name, text
FROM user_views;
[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주말]
[10/26]C#,ASP.NET마스터
[10/27]JAVA&WEB프레임워크실무과정
[평일야간]
[10/17]SQL초보에서실전전문가까지
[10/22]자바초보에서안드로이드까지
[10/25]C#,ASP.NET마스터
[10/25]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[10/21]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[10/26]C#,ASP.NET마스터
[10/27]JAVA&WEB프레임워크실무과정
[평일야간]
[10/17]SQL초보에서실전전문가까지
[10/22]자바초보에서안드로이드까지
[10/25]C#,ASP.NET마스터
[10/25]Spring3.X, MyBatis, Hibernate실무과정
[주간]
[10/21]Spring3.X, MyBatis, Hibernate실무과정
댓글 없음:
댓글 쓰기