oracle 批量更新之update case when then

oracle 批量更新之update case when then

CreationTime--2018年8月7日15點51分

Author:Marydon

1.情景描述

  根據表中同一字段不一樣狀況下的值修改成對應的內容,如何實現?html

  使用case when then else end語句。java

2.錯誤用法

  沒有else語句,將會致使全表更新sql

  證明:oracle

  

  結果展現:spa

  說明:更新的是全表記錄,而不是更新的只是符合上面三種狀況的記錄;htm

  不在狀況範圍內的,執行的是將該字段值置空,sql語句至關於:blog

UPDATE BASE_AC_MODULE_BAK T
   SET T.MODULEICON = CASE
                        WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN
                         '/commons/images/img/add.png'
                        WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN
                         '/commons/images/img/update.png'
                        WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN
                         '/commons/images/img/delete.png'
                        ELSE
                         NULL
                      END  

3.case when then else end語法

  用法一:簡單case語句get

CASE SEX  
WHEN '1' THEN '男'  
WHEN '2' THEN '女'  
ELSE '其餘' END  

  用法二:case搜索語句it

CASE WHEN SEX = '1' THEN '男'
WHEN SEX = '2' THEN '女' 
ELSE '其餘' END

  用法說明:io

  與java的switch語句不一樣是,若是不聲明ELSE語句,oracle會自動添加ELSE語句(ELSE NULL),當數據出現與case的狀況都不匹配時,

  顯示的不是原數據,而是空值;

  必須有END關鍵詞聲明結束CASE語句;

  另外,需特別注意的是:使用CASE語句,不管是查詢仍是修改語句,在不加限制條件的狀況下,默認是對全表進行操做!

4.正確用法

  方法一

UPDATE BASE_AC_MODULE_bak T
   SET T.MODULEICON = CASE
                        WHEN T.MODULEICON = '/commons/images/img/add.gif' THEN
                         '/commons/images/img/add.png'
                        WHEN T.MODULEICON = '/commons/images/img/edit.gif' THEN
                         '/commons/images/img/update.png'
                        WHEN T.MODULEICON = '/commons/images/img/delete.gif' THEN
                         '/commons/images/img/delete.png'
                        ELSE
                         T.MODULEICON
                      END
 WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR
       T.MODULEICON = '/commons/images/img/delete.gif' OR
       T.MODULEICON = '/commons/images/img/edit.gif')

  else爲何能夠省略?

  更新加上限制條件後,只有16條數據符合要求並進行修改,不存在else的狀況。

  方法二:限制條件加在where後,多個條件之間使用or

UPDATE BASE_AC_MODULE_BAK T
   SET T.MODULEICON = DECODE(T.MODULEICON,
                             '/commons/images/img/add.gif',
                             '/commons/images/img/add.png',
                             '/commons/images/img/edit.gif',
                             '/commons/images/img/update.png',
                             '/commons/images/img/delete.gif',
                             '/commons/images/img/delete.png')
 WHERE (T.MODULEICON = '/commons/images/img/add.gif' OR
       T.MODULEICON = '/commons/images/img/delete.gif' OR
       T.MODULEICON = '/commons/images/img/edit.gif')

  

相關文章
相關標籤/搜索