oracle学习-PL SQL 存储过程中循环
PL SPL 提供了3中不同類型的循環結構
-- 實例:索引 loop_counter從1開始,到10 結束,循環共執行10次 FOR loop_counter IN 1 .. 10 LOOP...可執行語句... END LOOP; -- 索引loop_counter從10開始,到1結束,循環共執行10次; FOR loop_counter IN REVERSE 1 .. 10 LOOP...可執行語句... END LOOP; -- 循環的執行范圍取決于變量或者表達式的值: FOR calc_index IN start_period_number .. LEAST(end_period_number, current_period) LOOP ...可執行語句... END LOOP; --在這個例子中,循環的執行次數是在運行時候決定的。邊界值只會在循環開始之前被求值一次,然后在整個循環生命期內都有效。?
- 簡單循環或者無限循環?
- FOR循環(數值循環和游標循環)
- WHILE循環
簡單循環:LOOP關鍵字開始,以END LOOP語句結束,要靠循環體內的EXIT、EXIT WHEN 或者 RETURN來退出循環(或者異常拋出)
【EXIT WHEN后面跟布爾表達式,沒有退出條件的話,就會變成無窮循環】
FOR循環:要使用數值型FOR循環,需要指定循環開始的整數值和結束整數值,PL/SQL會完成剩下的工作,迭代每一個中間取值,然后結束循環;
【需要最少量的代碼、預先知道循環體需要執行的固定次數,這個范圍在FOR和LOOP兩個關鍵字之間已經給出了。 ?如果只想有限次數的執行一段代碼,又不想過早的結束循環,就可以使用數值型的FOR循環】
游標型的FOR循環使用相同的基本結構,但需要提供一個明確的游標或者SELECT語句,而不是數值型FOR循環使用的整數的上下邊界。
【如果你需要取出游標的每條記錄依次處理,就可以使用游標FOR循環】
WHILE循環:WHILE循環和簡單循環非常相似,一個關鍵的區別在于WHILE循環會在每次循環之前檢查是否滿足終止條件。
【下列場合使用WHILE循環: a.你事先無法確定會循環多少次;b.你想通過條件來終止循環;c.循環體不是必須要執行的】
?
每個結構包括兩部分:循環邊界和循環體。
關于簡單循環中,什么時候用EXIT WHEN,什么時候使用拆分的EXIT:
1.如果只有一個條件表達式決定循環是否應該結束,這種情況下使用EXIT WHEN 最好
2.如果有多個退出條件,或者要根據不同的退出條語句件設置“返回值”時,使用IF或者CASE應該更合適,在這些語句的一個或多個子句中使用EXIT語句。
?【REPEAT UNTIL】 PL SQL沒有
在循環中,可以適當暫停(休眠) ?DBMS_LOCK.sleep(10); -- 10秒鐘內不做任何事情
PL SQL并沒有提供可以指定特殊的累進步幅得“步進”的語法。在PL SQL的數值型FOR循環的各種變體中,遞進的步幅總是以1為單位前進或者后退。
如果希望一個循環體能夠以一種非平凡方式遞進(即增長步幅不是1),你必須寫一些聰明的代碼,這里以簡單例子: 在循環中使用簡單的乘法,遞歸次數只需要一半:(不太會)
FOR even_number IN 1 .. 50 LOOP calc_values(even_number*2); END LOOP;循環的標簽:可以通過標簽給一個循環命名,格式: ?<<label_name>> ,循環的標簽要緊靠在LOOP語句前面
<<all_emps>> FOR emp_rec IN emp_cur LOOP... END LOOP; -- 標簽也可以跟在END LOOP保留詞的后面,這是可選的 <<year_loop>> WHILE year_number <= 1995 LOOP <<month_loop>>FOR month_number IN 1 .. 12LOOP ...END LOOP month_loop;year_number := year_number + 1; END LOOP year_loop;CONTINUE:使用這個語句可以從循環的本次迭代退出,緊接著立即進入下一次迭代。(無條件的CONTINUE和有條件的CONTINUE WHEN)
?
轉載于:https://www.cnblogs.com/huiya/p/9258473.html
總結
以上是生活随笔為你收集整理的oracle学习-PL SQL 存储过程中循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARC 100 C - Linear A
- 下一篇: 宝塔面板数据库未授权访问(端口:888)