SQL oracle 向现有表添加检查约束

Shm*_*uli 3 sql oracle

我使用 SQL/PL 开发人员,我有一个名为 Appeal 的表,它有 2 个属性 OpenDate 和 CloseDate。我想添加一个约束以确保打开日期小于关闭日期。我在这个表中有很多记录。

这是我的代码:

alter table appeal
add constraint Check_Dates
check (OpenDate < CloseDate)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:ORA-02293:无法验证(STSTEM.CHECK_DATES) - 检查约束违反

有什么问题吗?谢谢

dan*_*era 5

你的约束看起来不错,我已经测试过了:

create table appeal ( OpenDate date,  CloseDate date);

alter table appeal
add constraint Check_Dates
check (OpenDate < CloseDate);

insert into appeal values ( sysdate, sysdate - 1 );
Run Code Online (Sandbox Code Playgroud)

结果如下:

架构创建失败:ORA-02290:违反检查约束 (USER_4_44096.CHECK_DATES)

问题是您的数据库中已经有 OpenDate < CloseDate 值的行。在创建约束之前修复它。看行为改变句子顺序:

create table appeal ( OpenDate date,  CloseDate date);

insert into appeal values ( sysdate, sysdate - 1 );

alter table appeal
add constraint Check_Dates
check (OpenDate < CloseDate);
Run Code Online (Sandbox Code Playgroud)

在这里你的问题:

架构创建失败:ORA-02293:无法验证 (USER_4_E4450.CHECK_DATES) - 检查约束违反