If statement 根据条件PL/SQL将列设置为NULL更新列

If statement 根据条件PL/SQL将列设置为NULL更新列,if-statement,plsql,null,sql-update,case,If Statement,Plsql,Null,Sql Update,Case,我想根据条件更新列:这个表有A、B、C、D、E列 这些具有值的列将更新为null。我不想触摸没有任何值的列 PS::列值不一样。您的查询几乎接近。下面的一个应该可以工作 update test_Data set A = CASE WHEN A is not NULL THEN NULL END, B = CASE WHEN B is not NULL THEN NULL END , C = CASE WHEN C is not NULL TH

我想根据条件更新列:这个表有A、B、C、D、E列

这些具有值的列将更新为null。我不想触摸没有任何值的列


PS::列值不一样。

您的查询几乎接近。下面的一个应该可以工作

  update test_Data 
     set  A = CASE WHEN A is not NULL THEN NULL END,
       B = CASE WHEN B is not NULL THEN NULL END ,
       C = CASE WHEN C is not  NULL THEN NULL END,
       D = CASE WHEN D is not   NULL THEN NULL END,
       E = CASE WHEN E = 'abc' THEN 'QWE' ELSE E END
     where (A is not NULL or B is not NULL or C is not NULL or D is not null or E is not null)
更新:

如果任何列具有NOTNULL约束,则必须将该列更改为NULL

alter table test_Data modify E null;

有关示例演示,请参考DB FIDLE link-

您需要牢记的一点:NULL为NULL。它基本上引入了三路逻辑,其中逻辑结果可以是真、假或空。因此A=Null的结果返回Null,A=Null,并且(可能看起来很奇怪)Null=Null的结果不是true/false,而是Null。同样,空=Null也是Null。让我们坚定地认识到空是空的。(当然,也有一些例外,但这是不寻常的情况)。您不会遇到像这里这样的麻烦。@VN'Corner谢谢您的更新。但是还有另一个列,比如E,它可以接受用户定义的值,比如“X”、“Y”和“Z”。所以当我去使用这个查询时,我得到一个错误,说不能将“E”更新为NULL。请建议如何处理此部分。似乎列E没有NULL约束,因此根据列定义本身,您无法在任何数据库中将该列更新为NULL。必须修改表以将列E修改为NULL。在答案中引用更新的dbfiddle链接。VN的sCorner是的,我不想将其设为null。我想让它有个值,比如说“QWE”。因此,如果它有任何值,比如说“ABC”,它应该改为“QWE”。但是,它不应该使查询变为null,它与修改case表达式一样简单。
alter table test_Data modify E null;