oracle學習 PL SQL 儲存過程中迴圈

2022-03-15 11:14:48 字數 2208 閱讀 3665

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 in

1 .. 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 然後右鍵單擊該存過,從彈出選...