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

Sql 在使用它更新另一个值之后,我需要将一个值设置为NULL,sql,oracle,updates,Sql,Oracle,Updates,我有这样的想法: UPDATE table1 SET variable2 = variable3 WHERE variable2 IS NULL; UPDATE table1 SET variable1 = variable2 WHERE variable1 IS NULL; 我的问题是,当我用variable3的值更改示例variable2时,我希望variable3为空 我认为我们有甲骨文12,我认为在理论上类似的东西应该会起作用: UPDATE table1 SET variable2

我有这样的想法:

UPDATE table1 SET variable2 = variable3 WHERE variable2 IS NULL;
UPDATE table1 SET variable1 = variable2 WHERE variable1 IS NULL;
我的问题是,当我用variable3的值更改示例variable2时,我希望variable3为空

我认为我们有甲骨文12,我认为在理论上类似的东西应该会起作用:

UPDATE table1 SET variable2 = variable3, variable3 = NULL WHERE variable2 IS NULL;
但是我们的DBA不希望我们使用这个

有什么想法吗


谢谢

正如Boneist在评论中所说,Oracle极不可能在这样一个基本级别上更改更新声明,以使您的更新无法工作

更重要的是,人们甚至不能开始这样想。因为没有人真正知道会/可能会发生什么变化,所以最好的也是唯一肯定的是继续以最适合当前版本的方式进行开发

你的更新很好

我要做的唯一补充是检查您从中复制的列是否真的有任何价值。这将避免在没有任何可更新内容的情况下更新行,并可能通过触发器打乱审核列(如果已实现这些触发器):

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;

您的DBA是否给出了不使用此选项的原因?您发布的SQL是否与您发送给DBA的SQL匹配,您可能已对此进行了简化?相应的列可能已被故意设置为不接受空值。DBA限制它的原因有很多;出于这个原因,我当然会联系你们的DBA。他说,是的,它现在可以工作,但如果我们更改Oracle的版本,它可能不再工作或类似的事情。不,我没有简化代码。关键是在变量1中有一个值,然后在2或3中有一个值,这与2的原理相同…你一直使用variableX,这意味着这些是局部变量。其中一些必须是数据库列而不是本地变量,否则SQL将无效。DBA是否反对您真正谈论的是变量,因此不需要使用UPDATE语句来修改它们?或者你真的在谈论更改不同列中的数据吗?对不起,我的错,是的,它们是数据库列,其中1、2和3的类型相同,并且接受NULL。。DBA休假两周。。。。