濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Oracle數(shù)據(jù)庫(kù)更新大批量數(shù)據(jù)案例

Oracle數(shù)據(jù)庫(kù)更新大批量數(shù)據(jù)案例

熱門(mén)標(biāo)簽:海南400電話哪里辦理 貴陽(yáng)電話外呼系統(tǒng)哪家好 400電話是不是免費(fèi)申請(qǐng) 南寧人工智能電銷機(jī)器人費(fèi)用 濟(jì)南地圖標(biāo)注公司 圖像地圖標(biāo)注 呼倫貝爾智能手機(jī)地圖標(biāo)注 安陽(yáng)外呼系統(tǒng)免費(fèi) 分布式呼叫中心

更新大批量數(shù)據(jù)的背景:

用戶需要將VIP的微信標(biāo)識(shí),傳給用戶的ERP會(huì)員檔案中,已知存量數(shù)據(jù)約50W行數(shù)據(jù),線下的微信標(biāo)識(shí)數(shù)據(jù)我們開(kāi)發(fā)提供了openid和erpid的csv文件,erpid和線下的會(huì)員檔案id對(duì)應(yīng),需要將openid也更新到會(huì)員檔案里。

更新數(shù)量大致分為兩大步驟

一、將我們要更新的數(shù)據(jù)源導(dǎo)入數(shù)據(jù)庫(kù)內(nèi),需要?jiǎng)?chuàng)建臨時(shí)表,將數(shù)據(jù)傳入臨時(shí)表
二、寫(xiě)游標(biāo),將臨時(shí)表內(nèi)的數(shù)據(jù)與需要更新的數(shù)據(jù)進(jìn)行更新

1.將csv文件里面的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)臨時(shí)表中,先創(chuàng)建臨時(shí)表

create table vip_openid
(erpid number(10),
 openid varchar(200)
)

2.臨時(shí)表創(chuàng)建后,將cvs文件里的數(shù)據(jù)導(dǎo)入表中,在這里我們選擇工具>文本導(dǎo)入器 

選擇要導(dǎo)入的csv文件,注意csv文件的表字段和數(shù)據(jù)庫(kù)表字段對(duì)應(yīng) 

選擇文件后在界面將會(huì)預(yù)覽導(dǎo)入的數(shù)據(jù) 

3.點(diǎn)擊到oracle的數(shù)據(jù),選擇導(dǎo)入的表,先選擇用戶名,用戶名下的表名,然后選擇表與csv文件表字段對(duì)應(yīng)關(guān)系,我們選擇導(dǎo)入,可以看到提示導(dǎo)入完成。

4.接下來(lái)就是對(duì)會(huì)員表和臨時(shí)表的數(shù)據(jù)關(guān)聯(lián)更新,我們先使用直接update方式進(jìn)行更新試驗(yàn),該方法只更新5W數(shù)據(jù),耗時(shí)12分鐘左右:

于是參考百度文檔建議,寫(xiě)了一個(gè)游標(biāo)如下

declare
 cursor cur is--聲明游標(biāo)cur
 select B.openid,A.ID ROW_ID
  FROM C_CLIENT_VIP A ,VIP_OPENID B
  WHERE A.ID=B.ERPID
  ORDER BY A.ID;--從A和B表中找到ID對(duì)應(yīng)的openid,并對(duì)游標(biāo)內(nèi)數(shù)組排序
 V_COUNTER NUMBER;--聲明一個(gè)number類型的變量
BEGIN 
V_VOUNTER:=0;--初始化變量值為0
 FOR ROW IN CUR LOOP--遍歷游標(biāo)
  UPDATE C_CLIENT_VIP A SET A.OPENID=ROW.OPENID WHERE A.ID=ROW_ID;
    V_COUNTER:=V_COUNTER+1;--每次循環(huán)變量值+1
  IF(V_COUNTER>=1000) THEN
    COMMIT;
    V_COUNTER:=0;--每更新1000行,V_COUNTER值為1000時(shí)候,就提交給數(shù)據(jù)庫(kù)
    提交后將變量歸零,繼續(xù)下一個(gè)1000行更新
  END IF;
 END LOOP;
  COMMIT;
END;


大概48W行數(shù)據(jù),43秒即更新完畢。

使用以上方式注意一點(diǎn),因?yàn)閿?shù)據(jù)庫(kù)會(huì)員表的ID有索引,所以使用游標(biāo)速率很快。如我們的多表關(guān)聯(lián)字段沒(méi)有索引,使用此方式可能效果不是很明顯。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • Oracle批量插入數(shù)據(jù)的三種方式【推薦】
  • C# Oracle批量插入數(shù)據(jù)進(jìn)度條的實(shí)現(xiàn)代碼
  • Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除示例代碼
  • MyBatis批量插入數(shù)據(jù)到Oracle數(shù)據(jù)庫(kù)中的兩種方式(實(shí)例代碼)
  • Oracle兩張表關(guān)聯(lián)批量更新其中一張表的數(shù)據(jù)
  • Oracle批量查詢、刪除、更新使用BULK COLLECT提高效率
  • mybatis執(zhí)行批量更新batch update 的方法(oracle,mysql兩種)
  • Oracle批量導(dǎo)入文本文件快速的方法(sqlldr實(shí)現(xiàn))
  • Oracle+Mybatis的foreach insert批量插入報(bào)錯(cuò)的快速解決辦法
  • Java實(shí)現(xiàn)mybatis批量插入數(shù)據(jù)到Oracle
  • Oracle批量執(zhí)行sql語(yǔ)句之禁用所有表的外鍵
  • oracle+mybatis 使用動(dòng)態(tài)Sql當(dāng)插入字段不確定的情況下實(shí)現(xiàn)批量insert
  • Oracle 高速批量數(shù)據(jù)加載工具sql*loader使用說(shuō)明

標(biāo)簽:合肥 郴州 南充 焦作 涼山 滁州 遼源 許昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle數(shù)據(jù)庫(kù)更新大批量數(shù)據(jù)案例》,本文關(guān)鍵詞  Oracle,數(shù)據(jù)庫(kù),更新,大批量,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle數(shù)據(jù)庫(kù)更新大批量數(shù)據(jù)案例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Oracle數(shù)據(jù)庫(kù)更新大批量數(shù)據(jù)案例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    迁西县| 丹棱县| 顺平县| 淮安市| 黄石市| 合山市| 繁昌县| 新营市| 延津县| 且末县| 景宁| 诸城市| 永顺县| 石林| 睢宁县| 安乡县| 陇南市| 连云港市| 酒泉市| 新竹市| 如皋市| 阳信县| 惠东县| 车险| 马关县| 祁东县| 海伦市| 周宁县| 延寿县| 观塘区| 合阳县| 高青县| 长垣县| 阿城市| 攀枝花市| 天等县| 河间市| 大埔县| 祥云县| 科尔| 鄂伦春自治旗|