柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫 Oracle中的循環(huán)
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫 Oracle中的循環(huán)
一.循環(huán)
在所有的編程語言中,循環(huán)都是一個(gè)非常重要的語法,掌握循環(huán),是程序員必不可少的工具。
在Oracle中,常用的有四種循環(huán),loop循環(huán),while循環(huán),for循環(huán)和goto循環(huán),在本篇文章中,會(huì)向大家分別介紹這幾種循環(huán)的語法,實(shí)例和基本使用注意等。(均為匿名塊或有名塊)
1. loop循環(huán)
loop經(jīng)常會(huì)與exit when關(guān)鍵字結(jié)合使用,具體語法如下:
1 2 3 4 5 loop????--開始循環(huán)的標(biāo)志 ??loop_body;???--要執(zhí)行的語句??????????? ??exit?when?條件;??--退出循環(huán)的條件 ??[loop_body;]???--要執(zhí)行的語句 end?loop;????--結(jié)束循環(huán)的標(biāo)志
循環(huán)輸出數(shù)值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1. 循環(huán)打印0-100之間的所有偶數(shù),并求和 declare var_num?int:=0; var_sum?int:=0; begin ??loop ????dbms_output.put_line(var_num); ????var_sum := var_sum + var_num; ????var_num := var_num + 2; ????exit?when?var_num >100; ??end?loop; ??dbms_output.put_line(var_sum); end; 2. 循環(huán)打印1+2+3+4+...+10 = 55這個(gè)式子和結(jié)果 declare var_num?int:= 1; var_sum?int:= 0; begin ??loop ????dbms_output.put(var_num); ????var_sum := var_sum + var_num; ????var_num := var_num + 1; ????exit?when?var_num > 10; ????dbms_output.put('+'); ???end?loop; ???dbms_output.put_line('='||var_sum); end;
2. while循環(huán)
while循環(huán)和loop循環(huán)的語法非常相似,不過相較于loop循環(huán),while循環(huán)多出了進(jìn)入循環(huán)的條件,具體語法如下:
1 2 3 4 5 6 while 條件???--進(jìn)入循環(huán)的條件 ??loop?????????--循環(huán)開始的標(biāo)志 ????loop_body;??????--要執(zhí)行的循環(huán)語句 ????[exit?when?條件;]???--中途退出的條件 ??end?loop; end;
依舊是循環(huán)打印1-100之間的所有偶數(shù),觀察兩者之間的區(qū)別
1 2 3 4 5 6 7 8 9 10 declare var_num?int?:= 0; begin ??while var_num <= 100 ????loop ??????dbms_output.put_line(var_num); ??????var_num := var_num + 2; ??????exit?when?var_num >100; ????end?loop; end;
循環(huán)打印1+2+3+...+10=55這個(gè)式子和結(jié)果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 declare var_num?int?:= 1; var_sum?int?:= 0; begin ??while var_num <= 10 ????loop ??????dbms_output.put(var_num); ??????var_sum := var_sum + var_num; ??????var_num := var_num + 1; ??????exit?when?var_num > 10; ??????dbms_output.put('+'); ?????end?loop; ?????dbms_output.put_line('='||var_sum); end;
3. for 循環(huán)
for循環(huán)是四種循環(huán)中最為簡單的一種,具體語法如下:
1 2 3 4 for?變量?in?[reverse] 小值..大值 loop ??loop_body; ??[exit?when?條件]; end?loop;
reverse是逆轉(zhuǎn)的意思,當(dāng)有reverse關(guān)鍵字時(shí),后面緊跟的值要反過來寫,即大值..小值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 循環(huán)打印0-100之間的所有偶數(shù) begin ??for?var_num?in?0..100 loop ????if mod(var_num,2) = 0?then ??????dbms_output.put_line(var_num); ????end?if; ??end?loop; end; # 循環(huán)打印1+2+3+...+10=55的式子和結(jié)果 declare var_sum?int?:= 0; begin ??for?var_num?in?1..10-1 loop ????dbms_output.put(var_num); ????dbms_output.put('+'); ????var_sum := var_sum + var_num; ??end?loop; ??dbms_output.put_line('10='||(var_sum+10)); end;
4. goto循環(huán)
goto的用法和其他三種循環(huán)都不一樣,當(dāng)使用goto時(shí),可以無條件的跳到處于同一個(gè)PL/SQL塊的任意執(zhí)行語句處。具體使用方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 循環(huán)打印0-100之間的所有偶數(shù),并求和
declare var_num?int?:= 0; var_sum?int?:= 0; begin ??<
利用goto循環(huán),循環(huán)打印1+2+3+...+10=55這個(gè)式子和結(jié)果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 declare var_num?int?:= 1; var_sum?int?:= 0; begin ??<
二. continue,retune,exit的使用
1. continue
continue在英文中有繼續(xù)的意思,在oracle中結(jié)合循環(huán)使用,則是跳過本次循環(huán),繼續(xù)下一次循環(huán)。
利用cintinue關(guān)鍵字,可以輕松的做到數(shù)據(jù)的篩選,例如打印0-100之間的所有偶數(shù):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 declare var_num?int?:= -1; begin ??loop ????var_num := var_num +1; # 當(dāng)大于100時(shí),會(huì)結(jié)束整個(gè)循環(huán) ????exit?when?var_num > 100; # 當(dāng)變量為奇數(shù)時(shí),會(huì)跳過之后的執(zhí)行語句,結(jié)束這次循環(huán),從而進(jìn)入下次循環(huán)? ????if mod(var_num,2) =1?then ????????continue; ????end?if; ????dbms_output.put_line(var_num); ??end?loop; end;???
和exit比較,continue不會(huì)跳出整個(gè)循環(huán),它只是跳過不符合條件的本次循環(huán),從而開啟新的循環(huán),依舊處于循環(huán)階段,直到所有數(shù)據(jù)全部循環(huán)完畢。而exit則是在符合條件后,直接結(jié)束整個(gè)循環(huán)部分,轉(zhuǎn)而去執(zhí)行循環(huán)體外的其他內(nèi)容。
2. return
在循環(huán)中使用exit和return時(shí),兩者的作用都是跳出整個(gè)循環(huán),不過不同于exit ,return在跳出整個(gè)循環(huán)的同時(shí),循環(huán)體外的其他內(nèi)容也不會(huì)執(zhí)行。
下面給出幾段代碼,查看兩者的不同:
1 2 3 4 5 6 7 8 9 10 begin ??for?var_num?in?1..5 loop ????if var_num = 3?then ??????exit; ???--return; ????end?if; ????dbms_output.put_line(var_num);?? ??end?loop; ??dbms_output.put_line('I love oracle!'); end;
結(jié)果:
1 2 3 4 5 6 7 8 exit: 1 2 I love oracle! return: 1 2
可以看出相較于exit,return直接跳出了整個(gè)循環(huán),同時(shí)還跳過了循環(huán)外的執(zhí)行語句,直接結(jié)束了整段代碼。結(jié)合網(wǎng)上查到的資料,則可以總結(jié)到:在oracle中,return的作用,是跳出整個(gè)語句,如果是存儲(chǔ)過程,則跳出存儲(chǔ)過程,如果是函數(shù),則跳出整個(gè)函數(shù)。
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫 Oracle中的循環(huán)
相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。