2013-10-17 96 views
0

刚刚在我们的11g中进行了一些数据迁移,发现了一种情况,通常我会创建几个单独的UPDATE脚本并进行思考。有没有办法使用同一脚本中的不同WHERE子句进行多个更新?Oracle使用多个WHERE子句更新单个表

我的意思,而不是

UPDATE table1 SET value1=X WHERE value1=A; 
UPDATE table1 SET value1=Y WHERE value1=B; 
UPDATE table1 SET value1=Z WHERE value1=C; 

你们能不能接近

UPDATE table1 SET value1=X WHERE value1=A,SET value1=Y WHERE value1=B, SET value1=Z WHERE value1=Z; 

显然上面的语法是错误的,但是这是我的观点。可以这样做吗,或者你只需​​要做三个独立的脚本?

预先感谢

KS

+0

我不是一个更新列取决于它自己的价值的大粉丝,尤其是其中多个,结合起来。在_other_列上更新条件似乎在逻辑上更安全一些。 –

+0

我认为你的第二个SQL有一个错字,最后它说'WHERE value1 = Z',但是在第一个SQL中它说'WHERE value1 = C' – gpeche

回答

3
UPDATE table1 SET value1 = CASE 
      WHEN value1=A THEN X 
      WHEN value1=B THEN Y ELSE XYZ 
     END; 
+0

想法没问题,实现有点错误,我想 – gpeche

1

使用一个CASE表达式:

update table1 
set value1 = case 
     when value1 = A then X 
     when value1 = B then Y 
     when value1 = C then Z 
    end 
where 
value1 in (A, B, C); 
1

OR DECODE()。

update table1 set 
value1 = decode(value1, A, X 
         , B, Y 
         , C, Z 
         , value1 
       ) 
where value1 in (A, B, C);