日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle将一个表数据更新时间,Oracle批量更新,将一个表的数据批量更新另一表

發布時間:2025/3/15 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle将一个表数据更新时间,Oracle批量更新,将一个表的数据批量更新另一表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題】現在有兩個千萬級別的結構相同數據不同數據表T_SMS_PHONENO(目的表),T_SMS_PHONENO2(源表),根據源表數據更新目的表的數據。

【分析】根據經驗,更新方法一般有以下幾種:

1、直接update。

update T_SMS_PHONENO?T?Set??? T.NAME=(select NAME from T_SMS_PHONENO2 where PHONENO=T.PHONENO)

2、采用分條更新。根據記錄ID逐條更新。

open cur is select phoneno,name from T_SMS_PHONENO;

loop

fetch cur in v_pn,v_name;

update T_SMS_PHONENO T?set T.NAME=v_name where v_pn=T.phoneno;

exit when cur% notfound;

end loop

3、采用分批次更新。將數據按表分區字段或其他字段依次進行分批次更新。

open cur is select?region from T_SMS_PHONENO group by region;

loop

fetch cur in v_region;

update T_SMS_PHONENO T?set T.NAME=(select name from T_SMS_PHONENO2 where phoneno=T.Phoneno) where T.region=v_region;

exit when cur% notfound;

end loop

4、虛擬一張表,唯一關聯后進行更新。

update (select? T.name,T2.name name2?from T_SMS_PHONENO T,T_SMS_PHONENO2 T2 where T.phoneno=T2.phoneno) set name=name2;

5、Create 一張新表后進行更新。

create table TEMP_SMS_PHONENO as select * from T_SMS_PHONENO T,T_SMS_PHONENO2 T2?where T.phoneno=T2.phoneno;

生成新表,然后重命名表為T_SMS_PHONENO

【結論】

1、對于大表的更新如果采用直接update語句,則會直接產生大量回滾,并且時間很長,出現假死現象。

2、1小時。

3、30分鐘。

4、2分鐘。

5、30秒,因為不產生redo,undo動作,insert語句會很快。

如果存在唯一性關聯字段的話,則采用第四種方法更新,是很快的,如果不存在唯一關聯字段則需要分批次更新,或者create 個新表。

總結

以上是生活随笔為你收集整理的oracle将一个表数据更新时间,Oracle批量更新,将一个表的数据批量更新另一表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。