1. 程式人生 > >Oracle資料庫批量更新某列資料

Oracle資料庫批量更新某列資料

先講下我遇到的情況:

 有一張表a,已經存在一個欄位該欄位是date型別,需求將該欄位改為varchar2()型別,我們都知道,

Oracle在該欄位有值情況是不可以更新資料的,如果你不在乎該欄位在表中位置變化的話,可以方法一操作:

方法一:新增一個欄位,然後把原列資料複製到這個列下,然後把原欄位刪除,把新增的欄位重新命名。

如果不想改變列位置但需要改變型別,請看下面:

oracle支援快速遊標,不需要定義直接把遊標寫到for迴圈中,這樣就方便了我們批量更新資料。

再加上oraclerowid物理欄位(oracle預設給每個表都有rowid這個欄位,並且是唯一索引),可以快速定位到要更新的記錄上。

begin  
  for cr in (select a.rowid,b.yqrq from temp_jhgl a,zj_jhgl b where a.id = b.id) loop
    update temp_jhgl set yqrq = to_char(cr.yqrq,'yyyy/MM/dd') where rowid = cr.rowid;
    end loop;
    end;
使用快速遊標的好處很多,可以支援複雜的查詢語句,更新準確,無論資料多大更新效率仍然高,但執行後不返回影響行數。