oracle 批量更新表字段


(一) 將數字替換成漢字

  第一步,去重查詢

  使用distinct關鍵字先對該字段值進行去重查詢,看共有幾種情況

--查詢指定區間內表停診字段的值
SELECT DISTINCT T.CLOSE_TZ
  FROM CONSULT_SCHEDULE T
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE('2018-01-01', 'yyyy-MM-dd') AND
       TO_DATE('2018-02-28', 'yyyy-MM-dd');

  查詢結果:共有3種情況

  

  第二步,區分不同的數值並更新對應的漢字

  0改為是,1改為否

  使用decode函數實現

--正確sql
UPDATE CONSULT_SCHEDULE T
   SET T.REPLACE_TZ = DECODE(REPLACE_TZ, '1', '', '0', '')
 WHERE T.REPLACE_TZ IN ('0', '1')
   AND T.SCHEDULE_DATE BETWEEN TO_DATE('2018-01-01', 'yyyy-MM-dd') AND
       TO_DATE('2018-02-28', 'yyyy-MM-dd');

  易錯點說明:

  錯誤一

--錯誤sql1:CLOSE_TZ字段是varchar2類型
UPDATE CONSULT_SCHEDULE T
   SET T.CLOSE_TZ = DECODE(CLOSE_TZ, 1, '', 0, '')
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE('2018-01-01', 'yyyy-MM-dd') AND
       SYSDATE;  

  

  解析:CLOSE_TZ字段是varchar2類型,1和0是number類型

  錯誤二:使用decode()函數必須加上限制條件,否則默認執行的是全表更新!

--錯誤sql2:使用decode()函數,不在指定的情況會被置空
UPDATE CONSULT_SCHEDULE T
   SET T.CLOSE_TZ = DECODE(CLOSE_TZ, '1', '', '0', '')
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE('2018-01-01', 'yyyy-MM-dd') AND
       SYSDATE;

  更新后,再次執行上面的查詢語句

  

  原因:根據第一個查詢執行的結果,可以得出正確的結果應該使用是和否這2種情況,但這卻是3種情況

  解析:這是因為decode函數使用不當造成的,應該將不需要更改的列去除掉。 

  小技巧:在修改數據庫數據時,執行update語句后,一定不要急着提交,執行一次查詢看看是否是自己想要的結果,再提交。

(二)將一個字段的值給另一字段  

UPDATE  VIRTUAL_CARD T SET T.ID_CARD=T.CARDNUM WHERE T.ID_CARD IS NULL;

(三)批量修改表字段中指定字符 

    UpdateTime--2017年8月23日08:44:34

    1.1.22 替換字段中指定字符串 

--將PATIENT_AUTO_IMAGEINFO表中字段IMAGE_ADRESS中的#號轉換成_
UPDATE PATIENT_AUTO_IMAGEINFO
   SET IMAGE_ADRESS = REPLACE(IMAGE_ADRESS, '#', '_')
 WHERE IMAGE_ADRESS LIKE '%#%'

(四)根據ID批量修改

UPDATE TSORGDIAITEM
    set FSTATUS = ?, FAUDITER = ?, FAUDDATE = SYSDATE
WHERE FID IN (15632875, 15612443)

 


免責聲明!

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



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