构建条件检查约束

Del*_*nte 2 oracle check-constraints

我正在尝试为我的表 TBL_AFIL 构建一个条件检查约束,它有两个字段:

  • Fec_Reun DATE
  • flg_afil 整数

约束条件:IF flg_afil=1 THEN Fec_Reun 不能为 NULL。

ALTER TABLE TBL_AFIL
ADD CONSTRAINT FecRenun_Not_Null CHECK (Fec_Renun IS not NULL and flg_afil =1) ;
Run Code Online (Sandbox Code Playgroud)

但它抛出这个错误:

ORA-02293: cannot validate (FecRenun_Not_Null) - check constraint violated
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个查询时,它返回 0 行。

SELECT * FROM TBL_AFIL
WHERE FEC_RENUN IS NULL
AND FLG_AFIL =1;
Run Code Online (Sandbox Code Playgroud)

我知道我可以添加这个约束ENABLE NOVALIDATE,但我很好奇为什么不能建立这个约束。

ype*_*eᵀᴹ 5

CHECK (NOT (flag_afil = 1 AND fec_renum IS NULL)) 
Run Code Online (Sandbox Code Playgroud)