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

主頁 > 知識庫 > Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)

Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)

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

1.情景展示

  Oracle 遍歷游標的四種方式(for、fetch、while、bulk collect+forall)

2.問題分析

  我們可以把游標想象成一張表,想要遍歷游標,就要取到游標的每行數據,所以問題的關鍵就成了:如何取到行數據?

3.解決方案

  方式一:FOR 循環(推薦使用)

  變形一:遍歷顯式游標

/* 如果是在存儲過程外使用顯式游標,需要使用DECLARE關鍵字 */
DECLARE
  /*創建游標*/
  CURSOR CUR_FIRST_INDEX IS
    SELECT A.ID        A_ID, --一級指標ID
           A.INDEXNAME A_INDEXNAME --一級指標名稱
      FROM INDEX_A A
     ORDER BY A_ID;
  /*定義游標變量,該變量的類型為基于游標CUR_FIRST_INDEX的行記錄*/
  ROW_CUR_FIRST_INDEX CUR_FIRST_INDEX%ROWTYPE;
/*游標處理*/
BEGIN
  /*遍歷顯式游標*/
  --FOR 循環
  FOR ROW_CUR_FIRST_INDEX IN CUR_FIRST_INDEX LOOP
    --循環體
    DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名稱":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}');
  END LOOP;
END;  

  執行,輸出結果

  變形二:遍歷隱式游標(推薦使用)

  for循環遍歷游標,其實又可以分為兩種方式,一種是顯式游標的遍歷,另一種是隱式游標的遍歷。

/* 如果是在存儲過程外使用隱式游標,如果用不到變量無需聲明DECLARE關鍵字 */
/*游標處理*/
BEGIN
  /*遍歷隱式游標*/
  --FOR 循環
  FOR ROW_CUR_FIRST_INDEX IN (SELECT A.ID        A_ID, --一級指標ID
                                     A.INDEXNAME A_INDEXNAME --一級指標名稱
                                FROM INDEX_A A
                               ORDER BY A_ID) LOOP
    --循環體
    DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名稱":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}');
  END LOOP;
END;

  隱式游標相較于顯式游標用法更加簡單,無需聲明直接調用即可。    

  方式二:FETCH 循環

/*游標聲明代碼和方式一一致,此處省略,直接展示游標處理代碼*/
BEGIN
  /*遍歷游標*/
  --FETCH 循環
  OPEN CUR_FIRST_INDEX; --必須要明確的打開和關閉游標
  LOOP
    FETCH CUR_FIRST_INDEX INTO ROW_CUR_FIRST_INDEX;
    EXIT WHEN CUR_FIRST_INDEX%NOTFOUND;
    --循環體
    DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名稱":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}');
  END LOOP;
  CLOSE CUR_FIRST_INDEX;
END;

  方式三:WHILE 循環

/*游標聲明代碼和方式一一致,此處省略,直接展示游標處理代碼*/
BEGIN
  /*遍歷游標*/
  OPEN CUR_FIRST_INDEX; --必須要明確的打開和關閉游標
  FETCH CUR_FIRST_INDEX
    INTO ROW_CUR_FIRST_INDEX;
  WHILE CUR_FIRST_INDEX%FOUND LOOP
    --循環體
    DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名稱":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}');
    FETCH CUR_FIRST_INDEX
      INTO ROW_CUR_FIRST_INDEX;
  END LOOP;
  CLOSE CUR_FIRST_INDEX;
END;  

  注意:使用while循環時,需要fetch兩次。

  方式四:BULK COLLECT+FORALL(速度最快)

/* 如果是在存儲過程外使用顯示游標,需要使用DECLARE關鍵字 */
/*聲明游標*/
DECLARE
  /*創建顯式游標*/
  CURSOR CUR_FIRST_INDEX IS
    SELECT A.ID        A_ID, --一級指標ID
           A.INDEXNAME A_INDEXNAME --一級指標名稱
      FROM INDEX_A A
     ORDER BY A_ID;
  /*定義表類型,該表的表結構為游標CUR_FIRST_INDEX的行記錄(可以存儲多條游標記錄)*/
  TYPE TABLE_CUR_FIRST_INDEX IS TABLE OF CUR_FIRST_INDEX%ROWTYPE;
  /* 聲明表變量*/
  TAB_FIRST_INDEX TABLE_CUR_FIRST_INDEX;
/*游標處理過程*/
BEGIN
  /*遍歷游標*/
  OPEN CUR_FIRST_INDEX;
  LOOP
    --將n行游標數據放到表中
    FETCH CUR_FIRST_INDEX BULK COLLECT
      INTO TAB_FIRST_INDEX LIMIT 1; -- 數據量太少,僅當前測試使用哦,實際開發建議 500 左右
    -- 退出條件
    EXIT WHEN TAB_FIRST_INDEX.COUNT = 0;
    --循環表數據
    FORALL I IN TAB_FIRST_INDEX.FIRST .. TAB_FIRST_INDEX.LAST LOOP
      DBMS_OUTPUT.PUT_LINE('{"ID":"' || TAB_FIRST_INDEX(I).A_ID || '","名稱":"' || TAB_FIRST_INDEX(I).A_INDEXNAME || '"}');
    END LOOP;
  END LOOP;
  CLOSE CUR_FIRST_INDEX;
END;

4.總結

  •   使用for循環的優勢在于:

  不需要手動打開關閉游標(聲明游標的開啟和關閉);

  不需要手動捕獲數據(自動將數據fetch到記錄型變量);

  不需要關注何時要退出,也就是不需要寫退出循環的滿足條件(遍歷完成就會退出)。

  •   第4方式與前3種的區別在于:

  前三種的游標變量:ROW_CUR_FIRST_INDEX,只能存儲游標的一條數據;

  第四種的表變量:TAB_FIRST_INDEX,可以存儲游標的多條數據。

  大數據批量處理的時候,第4種方式的優勢將會凸顯出來。

本文作者:Marydon

原文鏈接:https://www.cnblogs.com/Marydon20170307/p/12869692.html

以上就是Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)的詳細內容,更多關于Oracle 遍歷游標的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Oracle數據庫游標連接超出解決方案
  • 詳解Oracle游標的簡易用法
  • Oracle游標的使用實例詳解
  • Oracle中游標Cursor基本用法詳解
  • 詳解Oracle隱式游標和顯式游標
  • Oracle存儲過程游標用法分析
  • Oracle出現超出打開游標最大數的解決方法
  • Oracle顯示游標的使用及游標for循環
  • Oracle存儲過程返回游標實例詳解
  • Oracle 游標使用總結
  • Oracle使用游標進行分批次更新數據的6種方式及速度比對

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

巨人網絡通訊聲明:本文標題《Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)》,本文關鍵詞  Oracle,遍歷,游,標的,四種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)》相關的同類信息!
  • 本頁收集關于Oracle 遍歷游標的四種方式匯總(for、fetch、while、BULK COLLECT)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 利辛县| 博白县| 合水县| 永嘉县| 军事| 沧源| 马山县| 红原县| 巴林右旗| 温宿县| 延川县| 铜鼓县| 军事| 武安市| 海丰县| 牡丹江市| 东明县| 古田县| 衢州市| 江孜县| 阿巴嘎旗| 五原县| 三台县| 桂东县| 琼结县| 庆云县| 上饶县| 东阳市| 辽宁省| 惠安县| 兰西县| 东丽区| 沧州市| 富民县| 新和县| 突泉县| 清远市| 九龙城区| 池州市| 余江县| 儋州市|