SQL_VIEW OPTIONS [WITH CHECK OPTION]
WITH CHECK OPTION
WITH 앞의 where 조건식이 VIEW의 제약조건으로 작용하도록 함
기본 테이블에는 적용되지 않음
§ 형식
[ SQL> ~ with check option { constraint 제약조건이름 } ; ]
※ 제약조건이름을 설정하지 않으려면 중괄호 부분은 생략 가능
# 예제
▷ b_emp5 테이블에서 with check option을 사용하여 emp30 VIEW 작성(deptno 30의 모든 정보를 갖는 뷰)
▶ [ SQL> create view emp30 as select * from b_emp5 where deptno=30
with check option constraint emp30_ck;
뷰가 생성되었습니다. ]
# 에러
▷ emp30 테이블의 부서번호를 20번으로 변경
▶ [ SQL> update emp30 set deptno=20 where deptno=30;
1행에 오류:
ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다 ]
※ deptno의 값은 30만 올 수 있기 때문에 발생하는 오류
레코드 삭제나 같은 값으로의 수정은 가능함
# 예제
▷ 데이터를 입력하는데 id값이 100이하인 경우에만
입력을 허용해주는 뷰(v_test1)를 작성
▶ [ SQL> create view v_test1 as select * from test1
where id < 100 with check option constraint test1_ck;
뷰가 생성되었습니다 ]
# 에러
▷ id가 100인 값을 입력
▶ [ SQL> insert into v_test1 values(100);
1행에 오류:
ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다 ]
※ id 값이 100 미만인 값만 저장이 가능하기 때문에 발생하는 오류
뷰에 with check option으로 제약조건을 설정하는 방법에 대해 살펴보았습니다.
뷰에 데이터 입력을 잘못하면 테이블에도 반영되기 때문에 적절한 값이 저장될 수 있도록
check 옵션을 부여하는 것도 좋을 것 같습니다.