日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle学习-PL SQL 存储过程中循环

發(fā)布時間:2025/3/15 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle学习-PL SQL 存储过程中循环 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PL SPL 提供了3中不同類型的循環(huán)結(jié)構(gòu)

-- 實(shí)例:索引 loop_counter從1開始,到10 結(jié)束,循環(huán)共執(zhí)行10次 FOR loop_counter IN 1 .. 10 LOOP...可執(zhí)行語句... END LOOP; -- 索引loop_counter從10開始,到1結(jié)束,循環(huán)共執(zhí)行10次; FOR loop_counter IN REVERSE 1 .. 10 LOOP...可執(zhí)行語句... END LOOP; -- 循環(huán)的執(zhí)行范圍取決于變量或者表達(dá)式的值: FOR calc_index IN start_period_number .. LEAST(end_period_number, current_period) LOOP ...可執(zhí)行語句... END LOOP; --在這個例子中,循環(huán)的執(zhí)行次數(shù)是在運(yùn)行時候決定的。邊界值只會在循環(huán)開始之前被求值一次,然后在整個循環(huán)生命期內(nèi)都有效。

?

  • 簡單循環(huán)或者無限循環(huán)?
  • FOR循環(huán)(數(shù)值循環(huán)和游標(biāo)循環(huán))
  • WHILE循環(huán)

簡單循環(huán):LOOP關(guān)鍵字開始,以END LOOP語句結(jié)束,要靠循環(huán)體內(nèi)的EXIT、EXIT WHEN 或者 RETURN來退出循環(huán)(或者異常拋出)

【EXIT WHEN后面跟布爾表達(dá)式,沒有退出條件的話,就會變成無窮循環(huán)】

FOR循環(huán):要使用數(shù)值型FOR循環(huán),需要指定循環(huán)開始的整數(shù)值和結(jié)束整數(shù)值,PL/SQL會完成剩下的工作,迭代每一個中間取值,然后結(jié)束循環(huán);

【需要最少量的代碼、預(yù)先知道循環(huán)體需要執(zhí)行的固定次數(shù),這個范圍在FOR和LOOP兩個關(guān)鍵字之間已經(jīng)給出了。 ?如果只想有限次數(shù)的執(zhí)行一段代碼,又不想過早的結(jié)束循環(huán),就可以使用數(shù)值型的FOR循環(huán)】

游標(biāo)型的FOR循環(huán)使用相同的基本結(jié)構(gòu),但需要提供一個明確的游標(biāo)或者SELECT語句,而不是數(shù)值型FOR循環(huán)使用的整數(shù)的上下邊界。

【如果你需要取出游標(biāo)的每條記錄依次處理,就可以使用游標(biāo)FOR循環(huán)】

WHILE循環(huán):WHILE循環(huán)和簡單循環(huán)非常相似,一個關(guān)鍵的區(qū)別在于WHILE循環(huán)會在每次循環(huán)之前檢查是否滿足終止條件。

【下列場合使用WHILE循環(huán): a.你事先無法確定會循環(huán)多少次;b.你想通過條件來終止循環(huán);c.循環(huán)體不是必須要執(zhí)行的】

?

每個結(jié)構(gòu)包括兩部分:循環(huán)邊界和循環(huán)體。

關(guān)于簡單循環(huán)中,什么時候用EXIT WHEN,什么時候使用拆分的EXIT:

1.如果只有一個條件表達(dá)式?jīng)Q定循環(huán)是否應(yīng)該結(jié)束,這種情況下使用EXIT WHEN 最好

2.如果有多個退出條件,或者要根據(jù)不同的退出條語句件設(shè)置“返回值”時,使用IF或者CASE應(yīng)該更合適,在這些語句的一個或多個子句中使用EXIT語句。

?【REPEAT UNTIL】 PL SQL沒有

在循環(huán)中,可以適當(dāng)暫停(休眠) ?DBMS_LOCK.sleep(10); -- 10秒鐘內(nèi)不做任何事情

PL SQL并沒有提供可以指定特殊的累進(jìn)步幅得“步進(jìn)”的語法。在PL SQL的數(shù)值型FOR循環(huán)的各種變體中,遞進(jìn)的步幅總是以1為單位前進(jìn)或者后退。

如果希望一個循環(huán)體能夠以一種非平凡方式遞進(jìn)(即增長步幅不是1),你必須寫一些聰明的代碼,這里以簡單例子: 在循環(huán)中使用簡單的乘法,遞歸次數(shù)只需要一半:(不太會)

FOR even_number IN 1 .. 50 LOOP calc_values(even_number*2); END LOOP;

循環(huán)的標(biāo)簽:可以通過標(biāo)簽給一個循環(huán)命名,格式: ?<<label_name>> ,循環(huán)的標(biāo)簽要緊靠在LOOP語句前面

<<all_emps>> FOR emp_rec IN emp_cur LOOP... END LOOP; -- 標(biāo)簽也可以跟在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:使用這個語句可以從循環(huán)的本次迭代退出,緊接著立即進(jìn)入下一次迭代。(無條件的CONTINUE和有條件的CONTINUE WHEN)

?

轉(zhuǎn)載于:https://www.cnblogs.com/huiya/p/9258473.html

總結(jié)

以上是生活随笔為你收集整理的oracle学习-PL SQL 存储过程中循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。