Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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:如果绑定值等于它,则将字段更新为NULL,否则不使用PL/SQL保持不变?_Sql_Database_Oracle - Fatal编程技术网

SQL:如果绑定值等于它,则将字段更新为NULL,否则不使用PL/SQL保持不变?

SQL:如果绑定值等于它,则将字段更新为NULL,否则不使用PL/SQL保持不变?,sql,database,oracle,Sql,Database,Oracle,我有一个带有数值(38,0)字段的表,名为FOO。在UPDATE语句中,我已经在无条件地更新另外两个VARCHAR2字段BAR和BAZ 如果绑定值等于FOO,我如何巧妙地将FOO更新为NULL,否则保持不变?由于各种限制,我需要能够在没有PL/SQL的情况下做到这一点 示例1:如果当前记录的FOO为123,我需要一个UPDATE语句,其中FOO=123,BAR='Abc',BAZ='Def'更新BAR和BAZ,并将FOO设置为NULL 示例2:如果当前记录的FOO为123,我需要一个UPDATE

我有一个带有
数值(38,0)
字段的表,名为
FOO
。在
UPDATE
语句中,我已经在无条件地更新另外两个
VARCHAR2
字段
BAR
BAZ

如果绑定值等于
FOO
,我如何巧妙地将
FOO
更新为NULL,否则保持不变?由于各种限制,我需要能够在没有PL/SQL的情况下做到这一点

示例1:如果当前记录的
FOO
为123,我需要一个
UPDATE
语句,其中
FOO=123,BAR='Abc',BAZ='Def'
更新
BAR
BAZ
,并将
FOO
设置为
NULL

示例2:如果当前记录的
FOO
为123,我需要一个
UPDATE
语句,其中
FOO=299,BAR='Abc',BAZ='Def'
更新
BAR
BAZ
,但将
FOO
保留为123

DB是Oracle

我试着用
BITAND
nvl
+其他人做了一些聪明的东西,但还没有找到有效的东西

谢谢vgort

试试这个

UPDATE MyTable A SET
A.FOO = CASE WHEN A.FOO = YourBoundFOO THEN NULL ELSE A.FOO END,
A.BAR = 'Abc',
A.BAT = 'Def'
WHERE...
编辑-根据Andrey M的评论:

案例的另一种选择是使用

A.FOO = NULLIF (A.FOO,YourBoundFOO),

Yahia:在做这项工作的同时,我还做了以下工作:
updatemytable set FOO=DECODE(BITAND(FOO,)、NULL,FOO)where…

知道哪个更快吗?@user1037084我会怀疑我的版本,因为你的版本嵌套了两个函数调用,而我的版本只是执行一个简单的“IF-THEN”—但我真的不确定,测量一下。。。请不要忘了将任何有帮助的答案投票/标记为已接受(请参阅):-)@Yahia:您的案例表达式基本上与
NULLIF(A.FOO,yourbundfoo)
,否?@AndriyM是的,绝对。。。将其添加到帖子中以供将来参考。