溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么

發(fā)布時間:2021-07-16 00:40:26 來源:億速云 閱讀:1171 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

前言

我們在寫Oracle的存儲過程里面,經(jīng)常會用到游標(biāo),Oracle里面的游標(biāo)分為靜態(tài)游標(biāo)和動態(tài)游標(biāo)。今天我們在說一下分別有什么不同。

靜態(tài)游標(biāo)和動態(tài)游標(biāo)的概念

靜態(tài)游標(biāo)

顯式游標(biāo)和隱式游標(biāo)稱為靜態(tài)游標(biāo),因?yàn)樵谑褂盟麄冎?,游?biāo)的定義已經(jīng)完成,不能再更改。

定義:

Cursor 游標(biāo)名(參數(shù)1,參數(shù)2......) is  查詢語句

調(diào)用時:

for 變量行 in 游標(biāo)名 loop

end loop;

動態(tài)游標(biāo)

游標(biāo)在聲明時沒有設(shè)定,在打開時可以對其進(jìn)行修改。

定義:

TYPE 游標(biāo)別名 IS REF CURSOR;

游標(biāo)名 游標(biāo)別名;

調(diào)用時:

open 游標(biāo)名 for 動態(tài)SQL語句;

loop

    exit when 游標(biāo)名%NOTFOUND;

    fetch 游標(biāo)名

      into 變量1,變量2,變量3,變量4;

相對來說靜態(tài)游標(biāo)在存儲過程中用到的會比較多,而動態(tài)游標(biāo)相對較少,像我們?nèi)绻嬖诜指畋淼臅r候,取數(shù)據(jù)時就會用到動態(tài)游標(biāo)了。

代碼演示

使用背景

我們在存儲過程中輸入開始和結(jié)束日期,用于查詢開始到結(jié)束日期這一段時間內(nèi)的銷售。

解決思路

這個查詢我們就可以用到靜態(tài)游標(biāo)和動態(tài)游標(biāo)的結(jié)合使用。

  1. 通過靜態(tài)游標(biāo)設(shè)置開始和結(jié)果日期獲取到所涉及到的當(dāng)前年月。

  2. 根據(jù)獲取到的當(dāng)前年月生成要查詢對應(yīng)的月份分割表的動態(tài)SQL語句。

  3. 用動態(tài)游標(biāo)遍歷,然后進(jìn)行數(shù)據(jù)的處理。

代碼

Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么

上面是定義和靜態(tài)游標(biāo)和動態(tài)游標(biāo),下面的靜態(tài)游標(biāo)的寫法,是根據(jù)輸入的開始和結(jié)束日期獲取對應(yīng)的當(dāng)前年月

即如果輸入了2018-06-01----2018-08-30

游標(biāo)顯示結(jié)果為

201806

201807

201808


Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么

根據(jù)輸入的日期通過靜態(tài)游標(biāo)生成對應(yīng)的動態(tài)SQL語句。vs_sSql是我們的動態(tài)字符串,把主表查詢先加進(jìn)來,然后根據(jù)輸入的開始和結(jié)束日期找到對應(yīng)的月份分割表,然后判斷表是否存在,如果存在的話就用union all把分割表加入到動態(tài)SQL語句里


Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么

通過動態(tài)sql語句使用動態(tài)游標(biāo)遍歷銷售進(jìn)行數(shù)據(jù)的更新。

“Oracle的靜態(tài)游標(biāo)與動態(tài)游標(biāo)區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI