oracle 批量更新之update case when then


oracle 批量更新之update case when then

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

Author:Marydon

1.情景描述

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

  使用case when then else end語句。

2.錯誤用法

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

  證實:

  

  結果展示:

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

  不在情況范圍內的,執行的是將該字段值置空,sql語句相當於:

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語句

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

  用法二:case搜索語句

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

  用法說明:

  與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')

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM