婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle使用游標進行分批次更新數據的6種方式及速度比對

Oracle使用游標進行分批次更新數據的6種方式及速度比對

熱門標簽:杭州網絡外呼系統運營商 鶴壁電話機器人價格 安陽企業電銷機器人供應商 電銷套路機器人 汽車4s店百度地圖標注店 網貸外呼系統合法嗎 地圖標注坐標圖標 手機地圖標注門店 地圖標注效果的制作

1.情景展示

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

2.解決方案

  聲明:

  解決方案不只一種,該文章只介紹快速游標法及代碼實現;

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

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

--快速游標法
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 = '**市****區數據'
                         AND T2.REMARK = '**市****區數據') LOOP
    /* LOOP循環的是TEMP_CURSOR(逐條讀取TEMP_CURSOR) */
    UPDATE VIRTUAL_CARD10
       SET INDEX_ID = TEMP_CURSOR.ID
     WHERE ID_CARD = TEMP_CURSOR.ID_CARD;
    COMMIT; --提交
  END LOOP;
END;

  執行時間:

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

/* 使用隱式游標進行分批次更新 */
DECLARE
 V_COUNT NUMBER(10);
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 = '**市****區數據'
             AND T2.REMARK = '**市****區數據') LOOP
  /* 業務邏輯 */
  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; -- 提交所有數據,把這個去掉,可以查看是否是自己想要的效果,再決定是否提交
END;

  執行時間:

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

/* 使用游標進行分批次更新 */
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 = '**市****區數據'
       AND T2.REMARK = '**市****區數據';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得一行游標數據并放到對應變量中 */
    FETCH TEMP_CURSOR
      INTO V_INDEX_ID, V_ID_CARD;
    /* 如果沒有數據則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 業務邏輯 */
    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; -- 提交所有數據,把這個去掉,可以查看是否是自己想要的效果,再決定是否提交
  CLOSE TEMP_CURSOR;
END;

  執行時間:

  10000條1提交,執行時間:

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

/* 使用游標+數組進行更新(更新一次提交一次) */
DECLARE
  /* 創建數組:一列多行 */
  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;
  /* 將查詢出來的數據放到游標里 */
  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 = '**市****區數據'
       AND T2.REMARK = '**市****區數據';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標數據并放到對應數組中,每次讀取1000條數據 */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數據則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數據 */
    FOR I IN V_INDEX_ID.FIRST .. V_INDEX_ID.LAST LOOP
      /* 業務邏輯 */
      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;

  執行時間:

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

/* 使用游標+數組進行更新(1000條提交一次) */
DECLARE
  /* 創建數組:一列多行 */
  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;
  /* 將查詢出來的數據放到游標里 */
  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 = '**市****區數據'
       AND T2.REMARK = '**市****區數據';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標數據并放到對應數組中 */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數據則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數據 */
    FOR I IN V_INDEX_ID.FIRST .. V_INDEX_ID.LAST LOOP --或者:FOR I IN 1 .. V_INDEX_ID.COUNT LOOP
      /* 業務邏輯 */
      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;

  執行時間:

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

/* 使用游標+數組進行更新(BULK COLLECT和FORALL) */
DECLARE
  /* 創建數組:一列多行 */
  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;
  /* 將查詢出來的數據放到游標里 */
  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 = '**市****區數據'
       AND T2.REMARK = '**市****區數據';
BEGIN
  OPEN TEMP_CURSOR;
  LOOP
    /* 取得1000行游標數據并放到對應數組中 */
    FETCH TEMP_CURSOR BULK COLLECT
      INTO V_INDEX_ID, V_ID_CARD LIMIT 1000;
    /* 如果沒有數據則退出 */
    EXIT WHEN TEMP_CURSOR%NOTFOUND;
    /* 遍歷數據 */
    FORALL I IN 1 .. V_INDEX_ID.COUNT-- 或者V_INDEX_ID.FIRST .. V_INDEX_ID.LAST
    /* 業務邏輯 */
      UPDATE VIRTUAL_CARD10
         SET INDEX_ID = V_INDEX_ID(I)
       WHERE ID_CARD = V_ID_CARD(I);
    COMMIT; --提交
  END LOOP;
  CLOSE TEMP_CURSOR;
END;

  執行時間:

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

  這兩個語句在PL/SQL內部進行一種數組處理;BULK COLLECT提供對數據的高速檢索,FORALL可大大改進INSERT、UPDATE和DELETE操作的性能。

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

小結:

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

  一定要建索引。

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

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

標簽:焦作 泰安 酒泉 南陽 梧州 河源 柳州 銀川

巨人網絡通訊聲明:本文標題《Oracle使用游標進行分批次更新數據的6種方式及速度比對》,本文關鍵詞  Oracle,使用,游標,進行,分,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Oracle使用游標進行分批次更新數據的6種方式及速度比對》相關的同類信息!
  • 本頁收集關于Oracle使用游標進行分批次更新數據的6種方式及速度比對的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久er精品视频| 亚洲欧美日韩一区二区| 国产大陆亚洲精品国产| 欧美在线你懂得| 精品电影一区二区三区| 国产精品麻豆久久久| 麻豆91精品视频| 视频一区视频二区中文字幕| 日韩精品一二三| 日韩一区二区三区观看| 中文字幕一区视频| 日本伊人午夜精品| 在线亚洲精品福利网址导航| 136国产福利精品导航| 亚洲日本在线a| heyzo一本久久综合| 久久久五月婷婷| 精品午夜久久福利影院| 91精品国产aⅴ一区二区| 亚洲精品国久久99热| 五月天亚洲精品| 91黄视频在线| 亚洲激情图片小说视频| 色悠悠亚洲一区二区| 亚洲久本草在线中文字幕| 91丨九色porny丨蝌蚪| 中文字幕av一区二区三区高| 成人在线综合网站| 精品久久久久久综合日本欧美| 麻豆精品一区二区三区| 亚洲一区视频在线| 日韩一区二区电影在线| 日韩午夜精品电影| 国产亚洲精久久久久久| 午夜精品久久久久久久99樱桃| 欧美亚洲动漫精品| 欧美日韩成人综合在线一区二区| 欧美一区二区精品在线| 久久99久久精品欧美| 精品国产乱码久久久久久蜜臀 | 国产精品久久精品日日| 91麻豆国产自产在线观看| 国内成人免费视频| 亚洲成精国产精品女| 中文字幕在线不卡| 欧美大片一区二区| 欧美日韩精品福利| 99久久久精品| 成人免费毛片aaaaa**| 国产专区欧美精品| 日本美女一区二区三区| 日韩 欧美一区二区三区| 亚洲另类在线一区| 色妹子一区二区| 欧美日本高清视频在线观看| 国产精品久久久久久福利一牛影视 | 亚洲欧美色图小说| 日韩一区二区三区电影 | 欧美性猛片aaaaaaa做受| 精品999在线播放| 国产成人在线视频网站| 麻豆一区二区三| 另类的小说在线视频另类成人小视频在线| 最新热久久免费视频| wwwwww.欧美系列| 欧美激情一二三区| 精品国一区二区三区| 欧美精品一区二区三区蜜臀| 久久久影视传媒| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产精品久久久久aaaa樱花| 亚洲色图在线看| 国产丶欧美丶日本不卡视频| 91精品婷婷国产综合久久| 久久久国产精品麻豆| 《视频一区视频二区| 国产精品久久久久久久久久免费看| 欧美高清视频一二三区 | 91小视频免费看| 午夜精品福利一区二区三区av| 91麻豆精品国产| 国产欧美视频在线观看| 亚洲国产精品视频| 91丨porny丨国产| 亚洲国产精品自拍| 91精品在线一区二区| 激情深爱一区二区| 国产精品免费av| 色欲综合视频天天天| 蜜桃一区二区三区在线| 99精品视频在线观看免费| 日本少妇一区二区| 亚洲成a天堂v人片| 欧美一区三区四区| 精品中文字幕一区二区| 日本视频免费一区| 91极品视觉盛宴| 成人免费在线播放视频| 不卡电影一区二区三区| 国产欧美精品一区| 国产成人免费9x9x人网站视频| 欧美日韩高清影院| 丝袜国产日韩另类美女| 日韩西西人体444www| 蜜桃一区二区三区在线| 精品日韩99亚洲| 亚洲va国产天堂va久久en| 欧美性生活影院| 免费在线观看一区| 久久综合丝袜日本网| 91麻豆产精品久久久久久| 亚洲一本大道在线| 欧美日韩电影一区| 69堂国产成人免费视频| 99在线精品一区二区三区| 国产精品丝袜91| 在线免费观看视频一区| 成人av电影观看| 日韩精品免费专区| 欧美激情中文不卡| 欧美亚洲国产一区二区三区va| 7777女厕盗摄久久久| 一色屋精品亚洲香蕉网站| 亚洲欧美乱综合| 国产精品久久久久久久久免费樱桃 | 欧美在线观看视频一区二区三区| 精品久久久久久久一区二区蜜臀| 国产一区二区三区观看| 日韩高清不卡在线| 亚洲精品菠萝久久久久久久| 国产超碰在线一区| 亚洲国产成人av| 中文字幕一区二区三区不卡| 日韩欧美国产午夜精品| 国产精品综合二区| 美女视频第一区二区三区免费观看网站| 国产日韩欧美在线一区| 日韩精品一区在线| 欧美久久久久免费| 在线视频一区二区三区| av一区二区三区在线| 国产成人高清视频| 亚洲一区二区三区四区中文字幕| 91麻豆精品国产自产在线观看一区 | 99久久免费精品| 成人国产精品免费观看视频| 视频在线在亚洲| 欧美日本精品一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟 | 日本不卡123| 欧美天堂亚洲电影院在线播放| 中文字幕亚洲欧美在线不卡| 国产精品三级av| 日韩一级二级三级| 国产91精品一区二区麻豆网站| 亚洲精品一二三| 色综合久久综合| 日韩高清在线不卡| 一区二区三区波多野结衣在线观看| 亚洲精品一区二区三区精华液| 国产成人综合网站| 欧美一区在线视频| 亚洲视频你懂的| 中文av字幕一区| 日韩va欧美va亚洲va久久| 91精品国产高清一区二区三区 | √…a在线天堂一区| 精品成人免费观看| 国产偷国产偷精品高清尤物| 欧美三级蜜桃2在线观看| 色综合久久久久综合99| 日韩欧美国产三级电影视频| 丰满白嫩尤物一区二区| 亚洲欧美激情在线| 丝袜美腿亚洲一区| 亚洲一区二区视频在线观看| 美女视频第一区二区三区免费观看网站| 日韩高清不卡一区二区| 国产一区二区不卡在线| 成人免费电影视频| 色先锋久久av资源部| 免费高清在线视频一区·| 免费成人在线观看| 成人夜色视频网站在线观看| 91色|porny| 久久夜色精品国产噜噜av| 国产精品久久久久国产精品日日| 香蕉久久夜色精品国产使用方法| 五月天婷婷综合| 成人精品在线视频观看| 欧美日韩国产bt| 一区二区三区精品在线| 国产精品一级二级三级| 欧美精品在线视频| |精品福利一区二区三区| 麻豆精品一区二区综合av| 99国产精品久久久| 日韩精品一区二区三区在线| 亚洲欧美另类久久久精品2019| 激情另类小说区图片区视频区|