SQL 11-5. WITH CHECK OPTION 절 사용
관련링크
본문
․ WITH CHECK OPTION 절을 사용하면 뷰를 통한 DML 작업이 뷰의 도메인 내에서 수행된다.
․ 뷰를 통해 행의 부서 번호 변경을 시도하면 WITH CHECK OPTION 제약 조건에 위배되므로 오류가 발생한다.
예제)
오라클 디비 예제 :
CREATE OR REPLACE VIEW empvu20
AS
SELECT *
FROM employees
WHERE department_id = 20
MSSQL 디비 예제 :
CREATE VIEW empvu20
AS
SELECT * FROM employee
WHERE pub_id=0877
WITH CHECK OPTION
SELECT * FROM empvu20
UPDATE empvu20
SET pub_id=9952
WHERE emp_id='H-B39728F'
범위를 벗어난 값으로 삭제, 수정, 삽입을 하려 하면 오류가 발생한다.*/
CREATE VIEW vtitleprice
AS
SELECT title_id, price
FROM titles
where price > 15.00
WITH CHECK OPTION
WITH CHECK OPTION CONSTRAINT empvu20_ck;
View created.
☞설명) WITH CHECK OPTION 절 사용
뷰를 통해 참조 무결성을 검사할 수 있으며 제약 조건을 데이터베이스 레벨로 적용할 수도 있다.
뷰는 데이터 무결성 보존에 사용할 수 있지만 사용이 매우 제한되어 있다.
WITH CHECK OPTION 절을 사용하면 뷰를 통한 INSERT 및 UPDATE 작업이 수행될 경우 해당 뷰가 선택할 수 없는 행
은 생성되지 않는다.
따라서 삽입 또는 갱신되는 데이터에 대해 무결성 제약 조건을 적용하고 데이터의 유효성을 검사할 수 있다.
뷰가 선택하지 않은 행에 대해 DML 작업을 시도하면 지정된 제약 조건 이름과 함께 다음 오류가 표시된다.
UPDATE empvu20
SET department_id = 10
WHERE employee_id = 20;
UPDATE empvu20
----------------------------------------------------------
ERROR at line 1 :
ORA-01402 : view WITH CHECK OPTION where-cloause violation
----------------------------------------------------------
참고 : 부서 번호를 10으로 변경하면 뷰에서 해당 사원을 더 이상 볼 수 없으므로 어떤 행도 갱신되지 않는다.
이 뷰에서는 WITH CHECK OPTION 절을 사용하므로 부서 20의사원만 볼 수 있으면 뷰를 통해 해당 사원의 부서 번호를
변경할 수는 없다.