如果一个值为NULL,则两个值均为NULL

时间:2018-05-23 10:37:26

标签: sql oracle null notnull

为澄清而编辑

第一部分我想根据规则自动更改数据:

对于每个区域,必须同时指定Area_one和Area_two,或者两者都未指定ex:要么它们都是NULL,要么都不是NULL - 必须是表级别。

到目前为止,我想出了:

constraint chk_Null check (Area_one is not null and Area_two is not null)

但是这样脚本就会拒绝任何插入的数据为空。

第二部分我想根据规则自动更改数据:

对于给定的值,当Value_one存在时,Value_two必须为NULL(反之亦然)

我写道:

constraint Value_chk check((Value_one IS NULL and Value_two IS NOT NULL) 
 or (Value_one is NOT NULL and value_two IS NULL))

但我不知道如何完成这些,或者我是否正确的方向。

先谢谢大家!

1 个答案:

答案 0 :(得分:1)

无效或两者均为:

constraint chk_Null check (
    (Area_one is not null and Area_two is not null) OR
    (Area_one is null and Area_two is null)
    )

要更改数据,您必须在触发器中执行此操作,因为常规检查约束将验证数据(并可能将其回滚)但不更新它。你的触发器必须在插入和更新时考虑提供的值都不为空(你会更新哪一个?)的情况。