Check Constraint Not Working
Date: Mon, 17 Aug 2009 09:41:19 -0700 (PDT)
Message-ID: <48b8e5c6-15a9-4e3d-b2e1-c1fd7cd79e6f_at_g31g2000yqc.googlegroups.com>
I have the following table:
SQL> create table nums
2 ( col1 number , 3 col2 number , 4 col3 number , 5 col4 number , 6 col5 number ,
7 col6 number
8 )
9 tablespace users
10 /
Table created.
Here are the business rules:
/*
#1 rule if col2 is not null then col1 is not null #2 rule if col3 is not null then col2 is not null #3 rule if col4 is not null then col3 is not null #4 rule if col5 is not null then col4 is not null #5 rule if col6 is not null then col5 is not null
*/
Here is the constraint to enforce the business rules:
SQL> alter table nums
add constraint nums_not_null_chk CHECK( CASE WHEN col2 is not null and col1 is not null THEN 1 WHEN col3 is not null and col2 is not null THEN 1 WHEN col4 is not null and col3 is not null THEN 1 WHEN col5 is not null and col4 is not null THEN 1 WHEN col6 is not null and col5 is not null THEN 1 ELSE 0 END = 1 ) ;
Table altered.
/* test rule #1 */
SQL> insert into nums (col1, col2) values(null,1) ;
insert into nums (col1, col2) values(null,1)
*
ERROR at line 1:
ORA-02290: check constraint (DEMO.NUMS_NOT_NULL_CHK) violated
SQL> insert into nums (col1, col2) values(1,1) ;
1 row created.
/* rule #1 works correctly */
/* test rule #2 */
SQL> insert into nums (col1, col2, col3) values(1,null,2) ;
insert into nums (col1, col2, col3) values(1,null,2)
*
ERROR at line 1:
ORA-02290: check constraint (DEMO.NUMS_NOT_NULL_CHK) violated
SQL> insert into nums (col1, col2, col3) values(1,2,2) ;
1 row created.
/* rule #2 works correctly */
/* test rule #3 */
SQL> insert into nums (col1,col2,col3,col4) values(1,2,null,3) ;
1 row created.
/* rule #3 FAILED! */
Why is rule #3 failing? Rules 3,4 and 5 all fail, but rules #1 and #2 are enforced.
Any ideas? Received on Mon Aug 17 2009 - 11:41:19 CDT