最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年10月21日 11:32:07   作者:Marydon  
這篇文章主要介紹了Oracle 遍歷游標(biāo)的四種方式匯總(for、fetch、while、BULK COLLECT),幫助大家更好的理解和使用Oracle數(shù)據(jù)庫(kù),感興趣的朋友可以了解下

1.情景展示

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

2.問(wèn)題分析

  我們可以把游標(biāo)想象成一張表,想要遍歷游標(biāo),就要取到游標(biāo)的每行數(shù)據(jù),所以問(wèn)題的關(guān)鍵就成了:如何取到行數(shù)據(jù)?

3.解決方案

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

  變形一:遍歷顯式游標(biāo)

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

  執(zhí)行,輸出結(jié)果

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

  for循環(huán)遍歷游標(biāo),其實(shí)又可以分為兩種方式,一種是顯式游標(biāo)的遍歷,另一種是隱式游標(biāo)的遍歷。

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

  隱式游標(biāo)相較于顯式游標(biāo)用法更加簡(jiǎn)單,無(wú)需聲明直接調(diào)用即可?!   ?/p>

  方式二:FETCH 循環(huán)

/*游標(biāo)聲明代碼和方式一一致,此處省略,直接展示游標(biāo)處理代碼*/
BEGIN
  /*遍歷游標(biāo)*/
  --FETCH 循環(huán)
  OPEN CUR_FIRST_INDEX; --必須要明確的打開(kāi)和關(guān)閉游標(biāo)
  LOOP
    FETCH CUR_FIRST_INDEX INTO ROW_CUR_FIRST_INDEX;
    EXIT WHEN CUR_FIRST_INDEX%NOTFOUND;
    --循環(huán)體
    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 循環(huán)

/*游標(biāo)聲明代碼和方式一一致,此處省略,直接展示游標(biāo)處理代碼*/
BEGIN
  /*遍歷游標(biāo)*/
  OPEN CUR_FIRST_INDEX; --必須要明確的打開(kāi)和關(guān)閉游標(biāo)
  FETCH CUR_FIRST_INDEX
    INTO ROW_CUR_FIRST_INDEX;
  WHILE CUR_FIRST_INDEX%FOUND LOOP
    --循環(huán)體
    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循環(huán)時(shí),需要fetch兩次。

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

/* 如果是在存儲(chǔ)過(guò)程外使用顯示游標(biāo),需要使用DECLARE關(guān)鍵字 */
/*聲明游標(biāo)*/
DECLARE
  /*創(chuàng)建顯式游標(biāo)*/
  CURSOR CUR_FIRST_INDEX IS
    SELECT A.ID        A_ID, --一級(jí)指標(biāo)ID
           A.INDEXNAME A_INDEXNAME --一級(jí)指標(biāo)名稱
      FROM INDEX_A A
     ORDER BY A_ID;
  /*定義表類型,該表的表結(jié)構(gòu)為游標(biāo)CUR_FIRST_INDEX的行記錄(可以存儲(chǔ)多條游標(biāo)記錄)*/
  TYPE TABLE_CUR_FIRST_INDEX IS TABLE OF CUR_FIRST_INDEX%ROWTYPE;
  /* 聲明表變量*/
  TAB_FIRST_INDEX TABLE_CUR_FIRST_INDEX;
/*游標(biāo)處理過(guò)程*/
BEGIN
  /*遍歷游標(biāo)*/
  OPEN CUR_FIRST_INDEX;
  LOOP
    --將n行游標(biāo)數(shù)據(jù)放到表中
    FETCH CUR_FIRST_INDEX BULK COLLECT
      INTO TAB_FIRST_INDEX LIMIT 1; -- 數(shù)據(jù)量太少,僅當(dāng)前測(cè)試使用哦,實(shí)際開(kāi)發(fā)建議 500 左右
    -- 退出條件
    EXIT WHEN TAB_FIRST_INDEX.COUNT = 0;
    --循環(huán)表數(shù)據(jù)
    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.總結(jié)

  •   使用for循環(huán)的優(yōu)勢(shì)在于:

  不需要手動(dòng)打開(kāi)&關(guān)閉游標(biāo)(聲明游標(biāo)的開(kāi)啟和關(guān)閉);

  不需要手動(dòng)捕獲數(shù)據(jù)(自動(dòng)將數(shù)據(jù)fetch到記錄型變量);

  不需要關(guān)注何時(shí)要退出,也就是不需要寫退出循環(huán)的滿足條件(遍歷完成就會(huì)退出)。

  •   第4方式與前3種的區(qū)別在于:

  前三種的游標(biāo)變量:ROW_CUR_FIRST_INDEX,只能存儲(chǔ)游標(biāo)的一條數(shù)據(jù);

  第四種的表變量:TAB_FIRST_INDEX,可以存儲(chǔ)游標(biāo)的多條數(shù)據(jù)。

  大數(shù)據(jù)批量處理的時(shí)候,第4種方式的優(yōu)勢(shì)將會(huì)凸顯出來(lái)。

本文作者:Marydon

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

以上就是Oracle 遍歷游標(biāo)的四種方式匯總(for、fetch、while、BULK COLLECT)的詳細(xì)內(nèi)容,更多關(guān)于Oracle 遍歷游標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Oracle?system/用戶被鎖定的解決方法

    Oracle?system/用戶被鎖定的解決方法

    很多人對(duì)oracle數(shù)據(jù)庫(kù)會(huì)將用戶鎖定感覺(jué)莫名其妙,所以下面這篇文章主要介紹了Oracle?system/用戶被鎖定的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Oracle數(shù)據(jù)庫(kù)查看與修改內(nèi)存配置的方法

    Oracle數(shù)據(jù)庫(kù)查看與修改內(nèi)存配置的方法

    在使用Oracle時(shí)我們需要關(guān)注數(shù)據(jù)庫(kù)的內(nèi)存使用情況,以確保其正確高效地運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)查看與修改內(nèi)存配置的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Oracle中三種表連接算法的總結(jié)

    Oracle中三種表連接算法的總結(jié)

    Oracle有三種表連接技術(shù),分別是嵌套連接、合并連接和哈希連接。以下就是對(duì)這三種表連接算法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • Oracle數(shù)據(jù)庫(kù)及圖形化界面安裝教程圖解

    Oracle數(shù)據(jù)庫(kù)及圖形化界面安裝教程圖解

    本文通過(guò)圖文并茂的形式給大家介紹了Oracle數(shù)據(jù)庫(kù)及圖形化界面安裝教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-08-08
  • Oracle參數(shù)設(shè)置教程之set和reset的實(shí)用案例

    Oracle參數(shù)設(shè)置教程之set和reset的實(shí)用案例

    最近在學(xué)習(xí)oracle,學(xué)習(xí)中遇到了一些覺(jué)著有必要記錄下的內(nèi)容,所以下面這篇文章主要給大家介紹了關(guān)于Oracle參數(shù)設(shè)置教程之set和reset實(shí)用案例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起看看吧。
    2017-10-10
  • oracle 更改數(shù)據(jù)庫(kù)名的方法

    oracle 更改數(shù)據(jù)庫(kù)名的方法

    這兩天一朋友問(wèn)如何更改數(shù)據(jù)庫(kù)名,于是做個(gè)測(cè)試,簡(jiǎn)單記錄下,以便說(shuō)明問(wèn)題。
    2009-10-10
  • Oracle 11g數(shù)據(jù)庫(kù)詳細(xì)安裝圖文教程

    Oracle 11g數(shù)據(jù)庫(kù)詳細(xì)安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了Oracle 11g數(shù)據(jù)庫(kù)詳細(xì)安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • [Oracle] CPU/PSU補(bǔ)丁安裝詳細(xì)教程

    [Oracle] CPU/PSU補(bǔ)丁安裝詳細(xì)教程

    Oracle CPU的全稱是Critical Patch Update, Oracle對(duì)于其產(chǎn)品每個(gè)季度發(fā)行一次安全補(bǔ)丁包,通常是為了修復(fù)產(chǎn)品中的安全隱患,以下是對(duì)CPU/PSU補(bǔ)丁安裝的具體操作步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考
    2013-07-07
  • 徹底刪除Oracle數(shù)據(jù)庫(kù)的方法

    徹底刪除Oracle數(shù)據(jù)庫(kù)的方法

    刪除Oracle數(shù)據(jù)庫(kù)并不難,但要徹底刪除就不簡(jiǎn)單了,下面為大家介紹下具體的實(shí)現(xiàn),感興趣的朋友可以參考下
    2014-02-02
  • Linux環(huán)境下Oracle數(shù)據(jù)庫(kù)重啟詳細(xì)步驟

    Linux環(huán)境下Oracle數(shù)據(jù)庫(kù)重啟詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Linux環(huán)境下Oracle數(shù)據(jù)庫(kù)重啟的詳細(xì)步驟,oracle在linux下重啟,有多種方式可選擇,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評(píng)論

祁连县| 开原市| 宽城| 平顶山市| 文成县| 龙泉市| 浙江省| 鄂尔多斯市| 微山县| 英超| 临桂县| 洞口县| 油尖旺区| 泸溪县| 台南市| 唐海县| 井研县| 科技| 扶风县| 凤山市| 内黄县| 双桥区| 澜沧| 山东| 普宁市| 工布江达县| 英德市| 香格里拉县| 汉源县| 曲周县| 荥经县| 宁化县| 洛浦县| 巫溪县| 安义县| 吴桥县| 庄浪县| 胶州市| 彩票| 弋阳县| 禄丰县|