pl spl 提供了3中不同型別的迴圈結構
--例項:索引 loop_counter從1開始,到10 結束,迴圈共執行10次
for loop_counter in
1 .. 10
loop
...可執行語句...
endloop;
--索引loop_counter從10開始,到1結束,迴圈共執行10次;
for loop_counter in
reverse
1 .. 10
loop
...可執行語句...
endloop;
--迴圈的執行範圍取決於變數或者表示式的值:
for calc_index in
start_period_number .. least(end_period_number, current_period)
loop
...可執行語句...
endloop;
--在這個例子中,迴圈的執行次數是在執行時候決定的。邊界值只會在迴圈開始之前被求值一次,然後在整個迴圈生命期內都有效。
簡單迴圈: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 in1 .. 50
loop
calc_values(even_number*2
);end loop;
迴圈的標籤:可以通過標籤給乙個迴圈命名,格式: <> ,迴圈的標籤要緊靠在loop語句前面
<>for emp_rec in
emp_cur
loop
...endloop;
--標籤也可以跟在end loop保留詞的後面,這是可選的
<>
while year_number <=
1995
loop
<>
for month_number in
1 .. 12
loop
...endloop month_loop;
year_number :
= year_number +1;
end loop year_loop;
oracle學習筆記 PL SQL
pl sql 它是一種過程化語言,在pl sql中可以使用if語句或是log語句,以實現控制程式的執行流程,甚至可以定義變數,以至在語句之間傳遞資料資訊,這樣pl sql語言就能夠實現操控程式處理的細節,因此使用pl sql語句可以實現比較複雜的業務邏輯,它是oracle的專用語言,它是對標準sql...
Oracle筆記 十 PL SQL儲存過程
or replace 建立或替換,如果存在就替換,不存在就建立create or replace procedure piscursor cisselect from dept2 for update beginfor row record in c loopif row record.deptno...
PL SQL如何除錯Oracle儲存過程
分步閱讀 除錯過程對找到乙個存過的bug或錯誤是非常重要的,oracle作為一款強大的商業資料庫,其上面的存過少則10幾行,多則上千行,免不了bug的存在,存過上千行的話,找bug也很費力,通過除錯可以大大減輕這種負擔。找到想要除錯的存過,左鍵單擊選中該存過 圖中位置1 然後右鍵單擊該存過,從彈出選...