뷰 제약조건

- [with check option]

deptno=30인 데이터만 조회되어 뷰가 생성된다.

데이터가 추가, 갱신 될때도 이 제약조건에 맞는 데이터만 적용된다.이 조건은 테이블과는 아무 상관없다.

SQL> create or replace view v_emp30
as select * from b_emp5
where deptno=30
with check option constraint v_emp30_ck;

 

- [with read only]

뷰를 통해서는 연결된 기본 테이블의 어떤 칼럼에 대해서도 내용을 절대 변경할 수 없도록 한다.

insert, update, delete 불가능

SQL> create or replace view v_dept30 
as select deptno,dname from dept 
where deptno=30 
with read only; 

뷰의 종류

단순뷰 하나의 테이블로 만들어진 뷰
dml(insert,update,delete)사용 가능(예외있음)/ 그룹함수,distinct 사용불가(그룹함수의 경우 별칭 부여하면 가능)
복합뷰 여러개의 테이블로 만들어진 뷰(ex 조인)
dml(insert,update,delete)사용 불가/ 그룹함수,disticnt 사용가능

 

단순뷰

단순뷰에서 기본적으로 그룹함수는 사용 불가능 하지만, 별칭을 사용한다면 가능하다

SQL> create or replace view v_maxsal
as select deptno,max(sal)
from emp
group by deptno; 

as select deptno,max(sal)
                 *
2행에 오류:
ORA-00998: 이 식은 열의 별명과 함께 지정해야 합니다

=> 가상필드는 필드가 존재하지 않는 필드이므로 필드로 생성(별칭부여)하지 않는 이상 가져올 수 없다.

SQL> create or replace view v_maxsal
as select deptno,max(sal) “최대급여”
from emp
group by deptno; 
뷰가 생성되었습니다.

 

**예외**

단순뷰는 dml이 가능하지만 예외가 있다.

뷰 안에 그룹함수, group by,distinct를 사용한 경우 delete,insert,update가 되지 않는다. 

또한 뷰 안에 별칭을 부여한 가상필드가 있는 경우 insert,update가 되지 않는다. 

 

뷰에서 insert,update,delete 구문을 적용하려면 실제 물리적인 필드가 존재해야한다. 

 

 

복합뷰

조인을 사용하여 복합뷰 생성

SQL> create or replace view v_dname 
as select e.ename, d.dname
from emp e, dept d
where e.deptno=d.deptno; 

뷰가 생성되었습니다.

SQL> select * from v_dname;
ENAME      DNAME
---------- --------------
CLARK      ACCOUNTING
       ...
MARTIN     SALES

서브쿼리를 사용하여 복합뷰 생성

SQL> create or replace view v_smith 
as select ename, sal, deptno from emp 
where sal >(select sal from emp 
where ename='SMITH');

 

 

--이어서 뷰에 관한 포스팅 작성할 예정입니다.

+ Recent posts