我在表x中有一个包含数据的列Hire_date
01-jun-98
16-aug-99
02-feb-09
01-mar-06
-
01-dec-08
17-mar-99
16-feb-07我被要求在该Hire_date列上创建一个检查约束。检查hire_date是否在2000年之后。我看到一个错误,我再次尝试检查hire_date是否在1996年之后。已成功创建约束。为什么我在为hire_date>2000创建检查约束时看到错误?
代码:
alter table x
add constraint check_hire_date check(hire_Date>'01-jan-2000') 获取错误
alter table x
add constraint check_hire_date check(hire_Date>'01-jan-1996') 成功
发布于 2014-08-01 09:42:21
你出错的原因是显而易见的。您的某些数据违反了约束。当您向表添加约束时,它将验证该约束的所有数据。
您可以使用novalidate选项跳过验证。如果在创建约束时应用novalidate选项,则可以在不使用约束验证旧(=当前)日期的情况下添加约束。约束将影响在创建约束后插入的数据。
sql> create table x (hire_date date);
sql> insert into x values ('1998-01-01');
sql> insert into x values ('2000-01-05');
sql> select * from x;
HIRE_DAT
--------
98/01/01
00/01/05
sql> alter table x add constraint d_check check
2 (hire_date >= to_date('2000-01-01', 'yyyy-mm-dd'))
3 novalidate;
sql> insert into x values ('1999-01-01');
insert into x values ('1999-01-01')
*
error at line 1:
check constraint (d_check check) violatedhttps://stackoverflow.com/questions/25067904
复制相似问题