Oracle資料庫批量更新某列資料
阿新 • • 發佈:2019-01-07
先講下我遇到的情況:
有一張表a,已經存在一個欄位該欄位是date型別,需求將該欄位改為varchar2()型別,我們都知道,
Oracle在該欄位有值情況是不可以更新資料的,如果你不在乎該欄位在表中位置變化的話,可以方法一操作:
方法一:新增一個欄位,然後把原列資料複製到這個列下,然後把原欄位刪除,把新增的欄位重新命名。
如果不想改變列位置但需要改變型別,請看下面:
oracle支援快速遊標,不需要定義直接把遊標寫到for迴圈中,這樣就方便了我們批量更新資料。
再加上oracle的rowid物理欄位(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;
使用快速遊標的好處很多,可以支援複雜的查詢語句,更新準確,無論資料多大更新效率仍然高,但執行後不返回影響行數。