亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Oracle使用游標(biāo)進(jìn)行分批次更新數(shù)據(jù)的6種方式及速度比對

Oracle使用游標(biāo)進(jìn)行分批次更新數(shù)據(jù)的6種方式及速度比對

熱門標(biāo)簽:杭州網(wǎng)絡(luò)外呼系統(tǒng)運營商 鶴壁電話機器人價格 安陽企業(yè)電銷機器人供應(yīng)商 電銷套路機器人 汽車4s店百度地圖標(biāo)注店 網(wǎng)貸外呼系統(tǒng)合法嗎 地圖標(biāo)注坐標(biāo)圖標(biāo) 手機地圖標(biāo)注門店 地圖標(biāo)注效果的制作

1.情景展示

  一共有22w條數(shù)據(jù), 需要將A表的主鍵更新至B表的指定字段,如何快速完成更新?

2.解決方案

  聲明:

  解決方案不只一種,該文章只介紹快速游標(biāo)法及代碼實現(xiàn);

  兩張表的ID和ID_CARD字段都建立了索引。 

  方式一:使用隱式游標(biāo)(更新一次提交1次)

--快速游標(biāo)法
BEGIN
  FOR TEMP_CURSOR IN (SELECT T2.ID, T2.ID_CARD
                        FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
                       WHERE T1.ID_CARD = T2.ID_CARD
                         AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
                         AND T2.REMARK = '**市****區(qū)數(shù)據(jù)') LOOP
    /* LOOP循環(huán)的是TEMP_CURSOR(逐條讀取TEMP_CURSOR) */
    UPDATE VIRTUAL_CARD10
       SET INDEX_ID = TEMP_CURSOR.ID
     WHERE ID_CARD = TEMP_CURSOR.ID_CARD;
    COMMIT; --提交
  END LOOP;
END;

  執(zhí)行時間:

  方式二:使用隱式游標(biāo)(更新1000次提交1次)(推薦使用)

/* 使用隱式游標(biāo)進(jìn)行分批次更新 */
DECLARE
 V_COUNT NUMBER(10);
BEGIN
 /* 隱式游標(biāo) */
 FOR TEMP_CURSOR IN (SELECT T2.ID, T2.ID_CARD
            FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
            WHERE T1.ID_CARD = T2.ID_CARD
             AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
             AND T2.REMARK = '**市****區(qū)數(shù)據(jù)') LOOP
  /* 業(yè)務(wù)邏輯 */
  UPDATE VIRTUAL_CARD10
    SET INDEX_ID = TEMP_CURSOR.ID
   WHERE ID_CARD = TEMP_CURSOR.ID_CARD;
  /* 更新一次,+1 */
  V_COUNT := V_COUNT + 1;
  /* 1000條提交1次 */
  IF V_COUNT >= 1000 THEN
   COMMIT; --提交
   V_COUNT := 0; --重置
  END IF;
 END LOOP;
 COMMIT; -- 提交所有數(shù)據(jù),把這個去掉,可以查看是否是自己想要的效果,再決定是否提交
END;

  執(zhí)行時間:

  方式三:顯式游標(biāo)+分批次更新(1000條1提交)

/* 使用游標(biāo)進(jìn)行分批次更新 */
DECLARE
  V_COUNT    NUMBER(10);
  V_INDEX_ID PRIMARY_INDEX10.ID%TYPE;
  V_ID_CARD  PRIMARY_INDEX10.ID_CARD%TYPE;
  CURSOR TEMP_CURSOR IS
    SELECT T2.ID, T2.ID_CARD
      FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
     WHERE T1.ID_CARD = T2.ID_CARD
       AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
       AND T2.REMARK = '**市****區(qū)數(shù)據(jù)';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得一行游標(biāo)數(shù)據(jù)并放到對應(yīng)變量中 */
    FETCH TEMP_CURSOR
      INTO V_INDEX_ID, V_ID_CARD;
    /* 如果沒有數(shù)據(jù)則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 業(yè)務(wù)邏輯 */
    UPDATE VIRTUAL_CARD10
       SET INDEX_ID = V_INDEX_ID
     WHERE ID_CARD = V_ID_CARD;
    /* 更新一次,+1 */
    V_COUNT := V_COUNT + 1;
    /* 1000條提交1次 */
    IF V_COUNT >= 1000 THEN
      COMMIT; --提交
      V_COUNT := 0; --重置
    END IF;
  END LOOP;
  COMMIT; -- 提交所有數(shù)據(jù),把這個去掉,可以查看是否是自己想要的效果,再決定是否提交
  CLOSE TEMP_CURSOR;
END;

  執(zhí)行時間:

  10000條1提交,執(zhí)行時間:

  方式四:顯式游標(biāo)+數(shù)組(更新一次提交一次)(使用BULK COLLECT)

/* 使用游標(biāo)+數(shù)組進(jìn)行更新(更新一次提交一次) */
DECLARE
  /* 創(chuàng)建數(shù)組:一列多行 */
  TYPE TYPE_INDEX_ID IS TABLE OF PRIMARY_INDEX10.ID%TYPE;
  TYPE TYPE_ID_CARD IS TABLE OF PRIMARY_INDEX10.ID_CARD%TYPE;
  /* 起別名 */
  V_INDEX_ID TYPE_INDEX_ID;
  V_ID_CARD  TYPE_ID_CARD;
  /* 將查詢出來的數(shù)據(jù)放到游標(biāo)里 */
  CURSOR TEMP_CURSOR IS
    SELECT T2.ID, T2.ID_CARD
      FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
     WHERE T1.ID_CARD = T2.ID_CARD
       AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
       AND T2.REMARK = '**市****區(qū)數(shù)據(jù)';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標(biāo)數(shù)據(jù)并放到對應(yīng)數(shù)組中,每次讀取1000條數(shù)據(jù) */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數(shù)據(jù)則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數(shù)據(jù) */
    FOR I IN V_INDEX_ID.FIRST .. V_INDEX_ID.LAST LOOP
      /* 業(yè)務(wù)邏輯 */
      UPDATE VIRTUAL_CARD10
         SET INDEX_ID = V_INDEX_ID(I)
       WHERE ID_CARD = V_ID_CARD(I);
      COMMIT;
    END LOOP;
  END LOOP;
  CLOSE TEMP_CURSOR;
END;

  執(zhí)行時間:

  方式五: 顯式游標(biāo)+數(shù)組(1000條提交一次)(使用BULK COLLECT)

/* 使用游標(biāo)+數(shù)組進(jìn)行更新(1000條提交一次) */
DECLARE
  /* 創(chuàng)建數(shù)組:一列多行 */
  TYPE TYPE_INDEX_ID IS TABLE OF PRIMARY_INDEX10.ID%TYPE;
  TYPE TYPE_ID_CARD IS TABLE OF PRIMARY_INDEX10.ID_CARD%TYPE;
  /* 起別名 */
  V_INDEX_ID TYPE_INDEX_ID;
  V_ID_CARD  TYPE_ID_CARD;
  /* 將查詢出來的數(shù)據(jù)放到游標(biāo)里 */
  CURSOR TEMP_CURSOR IS
    SELECT T2.ID, T2.ID_CARD
      FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
     WHERE T1.ID_CARD = T2.ID_CARD
       AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
       AND T2.REMARK = '**市****區(qū)數(shù)據(jù)';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標(biāo)數(shù)據(jù)并放到對應(yīng)數(shù)組中 */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數(shù)據(jù)則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數(shù)據(jù) */
    FOR I IN V_INDEX_ID.FIRST .. V_INDEX_ID.LAST LOOP --或者:FOR I IN 1 .. V_INDEX_ID.COUNT LOOP
      /* 業(yè)務(wù)邏輯 */
      UPDATE VIRTUAL_CARD10
         SET INDEX_ID = V_INDEX_ID(I)
       WHERE ID_CARD = V_ID_CARD(I);
      IF I >= V_INDEX_ID.LAST THEN
        COMMIT; --提交
      END IF;
    END LOOP;
  END LOOP;
  CLOSE TEMP_CURSOR;
END;

  執(zhí)行時間:

  方式六:推薦使用(使用BULK COLLECT和FORALL)

/* 使用游標(biāo)+數(shù)組進(jìn)行更新(BULK COLLECT和FORALL) */
DECLARE
  /* 創(chuàng)建數(shù)組:一列多行 */
  TYPE TYPE_INDEX_ID IS TABLE OF PRIMARY_INDEX10.ID%TYPE;
  TYPE TYPE_ID_CARD IS TABLE OF PRIMARY_INDEX10.ID_CARD%TYPE;
  /* 起別名 */
  V_INDEX_ID TYPE_INDEX_ID;
  V_ID_CARD  TYPE_ID_CARD;
  /* 將查詢出來的數(shù)據(jù)放到游標(biāo)里 */
  CURSOR TEMP_CURSOR IS
    SELECT T2.ID, T2.ID_CARD
      FROM VIRTUAL_CARD10 T1, PRIMARY_INDEX10 T2
     WHERE T1.ID_CARD = T2.ID_CARD
       AND T1.REMARK = '**市****區(qū)數(shù)據(jù)'
       AND T2.REMARK = '**市****區(qū)數(shù)據(jù)';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標(biāo)數(shù)據(jù)并放到對應(yīng)數(shù)組中 */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數(shù)據(jù)則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數(shù)據(jù) */
    FORALL I IN 1 .. V_INDEX_ID.COUNT-- 或者V_INDEX_ID.FIRST .. V_INDEX_ID.LAST
    /* 業(yè)務(wù)邏輯 */
      UPDATE VIRTUAL_CARD10
         SET INDEX_ID = V_INDEX_ID(I)
       WHERE ID_CARD = V_ID_CARD(I);
    COMMIT; --提交
  END LOOP;
  CLOSE TEMP_CURSOR;
END;

  執(zhí)行時間:

  從Oracle8開始,oracle為PL/SQL引入了兩個新的數(shù)據(jù)操縱語言(DML)語句:BULK COLLECT和FORALL。

  這兩個語句在PL/SQL內(nèi)部進(jìn)行一種數(shù)組處理;BULK COLLECT提供對數(shù)據(jù)的高速檢索,F(xiàn)ORALL可大大改進(jìn)INSERT、UPDATE和DELETE操作的性能。

  Oracle數(shù)據(jù)庫使用這些語句大大減少了PL/SQL與SQL語句執(zhí)行引擎的環(huán)境切換次數(shù),從而使其性能有了顯著提高。 

小結(jié):

  數(shù)據(jù)量小的時候可以用方式二,數(shù)據(jù)量大的時候推薦使用方式六;

  一定要建索引。

以上就是Oracle使用游標(biāo)進(jìn)行分批次更新的6種方式及速度比對的詳細(xì)內(nèi)容,更多關(guān)于Oracle 游標(biāo)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Oracle 遍歷游標(biāo)的四種方式匯總(for、fetch、while、BULK COLLECT)
  • Oracle數(shù)據(jù)庫游標(biāo)連接超出解決方案
  • 詳解Oracle游標(biāo)的簡易用法
  • Oracle游標(biāo)的使用實例詳解
  • Oracle中游標(biāo)Cursor基本用法詳解
  • 詳解Oracle隱式游標(biāo)和顯式游標(biāo)
  • Oracle存儲過程游標(biāo)用法分析
  • Oracle出現(xiàn)超出打開游標(biāo)最大數(shù)的解決方法
  • Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
  • Oracle存儲過程返回游標(biāo)實例詳解
  • Oracle 游標(biāo)使用總結(jié)

標(biāo)簽:焦作 泰安 酒泉 南陽 梧州 河源 柳州 銀川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle使用游標(biāo)進(jìn)行分批次更新數(shù)據(jù)的6種方式及速度比對》,本文關(guān)鍵詞  Oracle,使用,游標(biāo),進(jìn)行,分,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle使用游標(biāo)進(jìn)行分批次更新數(shù)據(jù)的6種方式及速度比對》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle使用游標(biāo)進(jìn)行分批次更新數(shù)據(jù)的6種方式及速度比對的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产麻豆精品高清在线播放| 韩国毛片免费| 精品在线观看国产| 99久久精品国产免费| 国产麻豆精品免费密入口| 精品在线观看国产| 91麻豆精品国产片在线观看| 日韩男人天堂| 久久久久久久免费视频| 亚洲精品影院| 欧美α片无限看在线观看免费| 精品久久久久久免费影院| 成人免费网站视频ww| 国产精品自拍在线| 日本在线不卡视频| 久久国产精品永久免费网站| 欧美日本韩国| 九九久久99| 精品视频一区二区| 国产伦久视频免费观看 视频| 黄视频网站在线免费观看| 一级女人毛片人一女人| 免费毛片基地| 久草免费在线观看| 久久久久久久免费视频| 国产极品精频在线观看| 香蕉视频久久| 精品国产香蕉伊思人在线又爽又黄| 成人免费网站视频ww| 美国一区二区三区| 国产亚洲男人的天堂在线观看| 999精品视频在线| a级毛片免费观看网站| 91麻豆精品国产高清在线| 日本在线不卡视频| 午夜在线亚洲| 天天做日日干| 日韩免费片| 九九免费高清在线观看视频| 四虎久久影院| 欧美国产日韩久久久| 日本免费看视频| 亚洲精品永久一区| 欧美激情一区二区三区在线 | 天堂网中文在线| 美女免费黄网站| 天天做日日爱| 天天色色色| 精品国产一区二区三区久| 美女免费精品高清毛片在线视 | 亚洲第一页色| 国产高清视频免费| 一级女性全黄生活片免费| 91麻豆精品国产片在线观看| 91麻豆爱豆果冻天美星空| 久久成人综合网| 久久精品免视看国产明星| 国产国语在线播放视频| 免费一级片在线| 精品国产一区二区三区精东影业 | 亚洲第一页色| 亚洲 激情| 国产91精品一区二区| 亚洲精品中文字幕久久久久久| 成人影院一区二区三区| 天天做日日爱夜夜爽| 国产成人精品综合| 亚洲 男人 天堂| 亚洲精品久久久中文字| 精品国产一区二区三区久 | 99色视频| 欧美一级视频高清片| 黄视频网站在线看| 可以在线看黄的网站| 久久精品道一区二区三区| 深夜做爰性大片中文| 国产不卡在线播放| 免费国产一级特黄aa大片在线| 99久久网站| 你懂的日韩| 亚飞与亚基在线观看| 色综合久久手机在线| 精品国产一区二区三区久久久狼| 精品视频在线观看免费| 国产a毛片| 日韩专区一区| 中文字幕一区二区三区 精品 | 国产不卡在线观看视频| 日本在线不卡免费视频一区| 免费毛片基地| 日韩一级黄色片| 亚洲天堂在线播放| 你懂的国产精品| 国产一级生活片| 四虎精品在线观看| 欧美一级视频高清片| 国产视频久久久| 国产国语在线播放视频| 亚洲www美色| 国产美女在线一区二区三区| 日韩中文字幕一区二区不卡| 91麻豆国产| 国产视频一区二区在线观看| 亚欧视频在线| 九九精品影院| 超级乱淫伦动漫| 日韩在线观看免费完整版视频| 亚洲精品久久久中文字| 四虎影视久久| 国产麻豆精品hdvideoss| 午夜激情视频在线播放| 精品视频在线观看视频免费视频| 精品在线观看一区| 成人免费高清视频| 国产成+人+综合+亚洲不卡| 超级乱淫黄漫画免费| 天天做日日爱夜夜爽| 黄色福利片| 成人a大片高清在线观看| 尤物视频网站在线| 日本在线播放一区| 免费国产一级特黄aa大片在线| 精品国产一区二区三区久久久蜜臀| a级黄色毛片免费播放视频| 欧美日本免费| 精品国产香蕉在线播出| 韩国毛片基地| 精品国产一区二区三区久久久蜜臀| 欧美激情一区二区三区中文字幕| 国产a视频| 精品国产三级a| 美女免费毛片| 可以免费在线看黄的网站| 国产福利免费观看| 久久精品欧美一区二区| 精品在线观看国产| 日本免费乱人伦在线观看| 久久久成人影院| 在线观看成人网| 美女免费毛片| 精品国产一区二区三区国产馆| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 九九久久国产精品大片| 精品视频在线看| 国产一区二区精品尤物| 美女免费黄网站| 国产高清在线精品一区二区| 欧美电影免费| 日韩专区亚洲综合久久| 美女免费精品视频在线观看| 欧美激情一区二区三区在线 | 久久精品店| 免费的黄视频| 99热热久久| 精品久久久久久免费影院| 国产91丝袜高跟系列| 日韩中文字幕一区二区不卡| 亚洲精品影院| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 精品国产一区二区三区免费 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩中文字幕一区二区不卡| 久久成人综合网| 高清一级片| 免费一级生活片| 九九九网站| 久草免费在线色站| 成人免费高清视频| 午夜在线影院| 一级女人毛片人一女人| 999久久狠狠免费精品| 你懂的福利视频| 九九热国产视频| 欧美日本免费| 精品在线视频播放| 国产精品自拍在线| 精品久久久久久中文| 九九干| 亚洲精品久久玖玖玖玖| 免费国产一级特黄aa大片在线| 99热精品在线| 欧美激情在线精品video| 国产伦久视频免费观看视频| 欧美激情一区二区三区视频| 免费国产在线观看不卡| 美女免费毛片| 国产不卡福利| 高清一级毛片一本到免费观看| 人人干人人草| 欧美激情一区二区三区在线| 免费国产在线观看不卡| 国产视频在线免费观看| 韩国毛片免费| 亚洲 欧美 91| 四虎影视久久| 国产麻豆精品| 精品视频在线观看一区二区| 99热精品一区| 四虎影视精品永久免费网站 | 二级特黄绝大片免费视频大片|