Data Base_Oracle/SQL

SQL_VIEW OPTIONS [WITH CHECK OPTION]

pathas 2020. 1. 9. 22:17

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 옵션을 부여하는 것도 좋을 것 같습니다.