您好,登錄后才能下訂單哦!
本篇內容介紹了“Oracle的靜態游標與動態游標區別是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
前言
我們在寫Oracle的存儲過程里面,經常會用到游標,Oracle里面的游標分為靜態游標和動態游標。今天我們在說一下分別有什么不同。
靜態游標和動態游標的概念
靜態游標
顯式游標和隱式游標稱為靜態游標,因為在使用他們之前,游標的定義已經完成,不能再更改。
定義:
Cursor 游標名(參數1,參數2......) is 查詢語句
調用時:
for 變量行 in 游標名 loop
end loop;
動態游標
游標在聲明時沒有設定,在打開時可以對其進行修改。
定義:
TYPE 游標別名 IS REF CURSOR;
游標名 游標別名;
調用時:
open 游標名 for 動態SQL語句;
loop
exit when 游標名%NOTFOUND;
fetch 游標名
into 變量1,變量2,變量3,變量4;
相對來說靜態游標在存儲過程中用到的會比較多,而動態游標相對較少,像我們如果存在分割表的時候,取數據時就會用到動態游標了。
代碼演示
使用背景
我們在存儲過程中輸入開始和結束日期,用于查詢開始到結束日期這一段時間內的銷售。
解決思路
這個查詢我們就可以用到靜態游標和動態游標的結合使用。
通過靜態游標設置開始和結果日期獲取到所涉及到的當前年月。
根據獲取到的當前年月生成要查詢對應的月份分割表的動態SQL語句。
用動態游標遍歷,然后進行數據的處理。
代碼
上面是定義和靜態游標和動態游標,下面的靜態游標的寫法,是根據輸入的開始和結束日期獲取對應的當前年月
即如果輸入了2018-06-01----2018-08-30
游標顯示結果為
201806
201807
201808
根據輸入的日期通過靜態游標生成對應的動態SQL語句。vs_sSql是我們的動態字符串,把主表查詢先加進來,然后根據輸入的開始和結束日期找到對應的月份分割表,然后判斷表是否存在,如果存在的話就用union all把分割表加入到動態SQL語句里
通過動態sql語句使用動態游標遍歷銷售進行數據的更新。
“Oracle的靜態游標與動態游標區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。