view에 사용되는 with check option

2006. 10. 20. 16:13Oracle/Oracle Study

반응형

view를 통해 insert 가 되는데 with check option 을 사용 여부에 따라 뷰의 조건에 해당하는

데이터만 삽입,삭제,수정 할 수 있다.

 

--예제를 보시면 훨씬 쉽게 이해 하실 수 있을 겁니다.

 

ex)  

create table testtable
(empno number(10) ,
deptno number(10),
name varchar2(20))

tablespace users;

 

insert into testtable values(10,20,'abc');

insert into testtable values(20,30,'ccc');

  이런식으로 대충 몇개 쭈-욱 데이터를 넣어요!

 

이제 view를 만들어봅시다.

 

1. with check option을 사용하지 않은 view

create view testview2
as
select * from testtable where empno in (10,20,30,40);

 

2. with check option을 사용한 view

create view testview
as
select * from testtable where empno in (10,20,30,40)

with check option;

 

※ with check option 이 어떤 기능을 하는지 여기서 알수 있을 것입니다.

view를 통해서 insert가 가능 합니다.

 

먼저 with check option 을 사용하지 않은 view 를 통해서 insert를 해봅시다.

 

insert into testview2 values(10,20,'view_com');

select 문을 실행시키면 데이터가 입력된 것을 확인 할 수 있습니다.

select * from testview2;

(이것은 view는 테이블이 아니기 때문에 testview에 입력된 것이 아니라 testtable에 입력된 것입니다.)

 

insert into testview2 values(80,90,'view_com2');

이것도 역시 테이블에서 확인해 보면 정상적으로 삽입 된 것을 볼 수 있다.

(view에 제약조건이 걸려 있기 때문에 view에는 나타나지 않고 testtable에는 나타난 것을 확인합니다.)

여기까지 정상적으로 모든것이 insert가 된 것을 확인 할수 있을 겁니다.

 

이제, with check option을 사용한 view 를 통해서 insert를 해봅시다.

위에서 insert한 값과 똑같이 넣어 보겠습니다.

insert into testview values(10,20,'view_com'); 아무 이상없이 실행 될것입니다.

 

하지만 

insert into testview values(80,90,'view_com2');

ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다.

이런 오류가 나오시는 것을 볼 수 있을 것입니다.

 

결론을 내리자면 with check option은

view를 만들 때 해당 제약조건 안에서만 삽입,삭제,수정이 가능하다는 것입니다.

 

위 예제는 view를 만들 때 empno가 10,20,30,40인 것들만 가져오는 것이였습니다.

그런데 with check option을 쓴 view에

empno에 80인 데이터를 넣을려고 하니 오류메세지가 나오는 것입니다.

 

알고보면 굉장히 간단하고 쉬운건데 너무 제가 장황하게 설명한 것 같습니다.

저도 이것에 대해 몰랐습니다. 인터넷에 찾아봐도 확실한 대답이 없었던 터라 책도 찾아보고

인터넷 자료도 수집하면서 몇 시간을 고생했답니다. 근데 너무 간단하죠!^^ㅎㅎㅎ

반응형

'Oracle > Oracle Study' 카테고리의 다른 글

Row Migration  (0) 2008.11.30
10g Archive Mode로 변경  (0) 2008.10.01
Rollup & Cube & Grouping 차이  (0) 2008.05.16
with grant option & with admin option 차이  (0) 2008.05.14
오라클 아스키로 특수문자 업데이트  (0) 2006.10.16