在使用它更新另一个值后,我需要将一个值设置为 NULL

I need to set a value to NULL after using it to update another value

我有这样的东西:

UPDATE table1 SET variable2 = variable3 WHERE variable2 IS NULL;
UPDATE table1 SET variable1 = variable2 WHERE variable1 IS NULL;

我遇到的问题是,当我用 variable3 的值更改 example variable2 时,我希望 variable3 变为 NULL。

我认为我们有 Oracle 12,我认为理论上类似的东西应该可以工作:

UPDATE table1 SET variable2 = variable3, variable3 = NULL WHERE variable2 IS NULL;

但是我们的 DBA 不希望我们使用这个....

有什么想法吗?

谢谢!

正如 Boneist 在评论中所说的那样,Oracle 极不可能在如此基础的层面上更改 UPDATE 声明以使您的 UPDATE 无法正常工作。

更重要的是,人们甚至不能开始那样想。由于没有人真正知道变化 will/might 是什么,最好的(也是唯一的)肯定是继续以当前版本最好的方式进行开发。

你的UPDATE很好

我要做的唯一补充是检查您从中复制的列是否真的有任何价值。这将避免 "updating" 没有什么可更新的行(并且可能通过触发器搞乱你的审计列,如果你已经实现了):

UPDATE table1 
   SET variable2 = variable3 
     , variable3 = NULL
 WHERE variable2 IS NULL
   AND variable3 IS NOT NULL;

UPDATE table1 
   SET variable1 = variable2 
     , variable2 = NULL
 WHERE variable1 IS NULL
   AND variable2 IS NOT NULL;