2009. 6. 30. 17:55

[Oracle] DML 절에 With Check option 조건

DML절에 With Check option절을 주어 View에서 생성된 조건에 대한 값을 반환과

동시에 DML에서 check 제약조건을 걸수 있다.
 

ex_) 

INSERT INTO  (  SELECT employee_id, last_name, email, hire_date, job_id, salary

                                FROM    empl3

                                WHERE  department_id = 50

                                WITH CHECK OPTION)

Values (9999, 'kkm', 'kyungmo', sysdate, 'kim', 5000);

 

View안에 where절을 보면 departmen_id값이 50인 값만을 반환한다. 동시에

department_id값에 check 제약조건을 50으로 걸어둔 것이다 .

 

지금 예문은

ORA-01402 : view WITH CHECK OPTION where-clauses violation

이렇게 에러가난다. 이유는 위에 설명과 같다.

insert되는 department값이 50값만 들어갈수 있는데. department_id 컬럼에 대한 명시는

insert절에 되어 있지 않다. 그래서 check 제약조건에 걸린다.

 

이걸 맞는 구문으로 바꾼다면 

INSERT INTO  (  SELECT employee_id, last_name, email, hire_date, job_id, 

                                               salary,  department_id

                                FROM    empl3

                                WHERE  department_id = 50

                                WITH CHECK OPTION)

Values (9999, 'kkm', 'kyungmo', sysdate, 'kim', 5000, 50);

이렇게 바꿔주면 check 제약조건에 걸리지 않는 쿼리가 된다.