Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果一个值为空,则两个值都为空_Sql_Oracle_Null_Notnull - Fatal编程技术网

Sql 如果一个值为空,则两个值都为空

Sql 如果一个值为空,则两个值都为空,sql,oracle,null,notnull,Sql,Oracle,Null,Notnull,为清晰起见进行了编辑 第一部分我希望根据规则自动更改数据: 对于每个分区,必须同时指定Area_one和Area_two,或者两者都不指定。例如:要么都为NULL,要么都不为NULL-必须为表级别 到目前为止,我提出了: constraint chk_Null check (Area_one is not null and Area_two is not null) 但是使用这个脚本只会拒绝任何空的插入数据 第二部分我想根据规则自动更改数据: 对于给定的值,当值_-one存在时,值_-two必

为清晰起见进行了编辑

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

对于每个分区,必须同时指定Area_one和Area_two,或者两者都不指定。例如:要么都为NULL,要么都不为NULL-必须为表级别

到目前为止,我提出了:

constraint chk_Null check (Area_one is not null and Area_two is not null)
但是使用这个脚本只会拒绝任何空的插入数据

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

对于给定的值,当值_-one存在时,值_-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))
但我不确定如何完成这些,或者我的方向是否正确

提前谢谢大家

都为空或两者都不为空:

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)
    )

要更改数据,您必须在触发器中执行此操作,因为您的常规检查约束将验证数据,并可能回滚数据,但不会更新数据。您的触发器必须在插入和更新时考虑,当提供的值都不为空时,您将更新哪一个?此外,检查约束不会更改列的值,只会更改行是否有效。所以你不能做你想做的。使用触发器?要使它们为空,是否有其他方法可以在没有检查约束的情况下执行此操作?谢谢,抱歉有两个问题,我不想发多篇文章。Q1是一个插入触发器,对于Q2,您可以使用视图而不是基表。如果另一列为null,视图可以使用case返回null。你应该能够很容易地找到例子。听起来像是一个独家或是想要的?我想知道这台机器是否可以用来做这个。