PL/SQL提供了豐富的流控制語句,用來對程式的執行流程進行控制。 通過流控制語句,我們可以編寫更複雜的PL/SQL塊。 流控制語句分為兩類,即條件判斷語句和迴圈語句。 IF語句 IF語句是一種條件判斷語句,它根據條件判斷的結果執行不同的代碼。 最簡單的IF語句格式為: IF 條件 THEN 代碼 ...
PL/SQL提供了豐富的流控制語句,用來對程式的執行流程進行控制。
通過流控制語句,我們可以編寫更複雜的PL/SQL塊。
流控制語句分為兩類,即條件判斷語句和迴圈語句。
IF語句
IF語句是一種條件判斷語句,它根據條件判斷的結果執行不同的代碼。
最簡單的IF語句格式為:
IF 條件 THEN
代碼
END IF;
如果條件成立,就執行指定的代碼,否則執行IF語句後面的代碼。
如果還要求在條件不成立時執行另外的代碼,則可以使用下麵的形式:
IF 條件 THEN
代碼1
ELSE
代碼2
END IF;
那麼當條件成立時執行代碼l ,條件不成立時執行代碼2 。
在更複雜的情況下,要先後判斷多個條件,這時要用到下麵的形式:
IF 條件1 THEN
代碼1
ELSIF 條件2 THEN
代碼2
...
ELSE
代碼n
END IF;
在執行上面的IF語句時,首先判斷條件l 。
當條件l 成立時執行代碼l ,否則繼續判斷條件2,如果成立則執行代碼2 ,否則繼續判斷下麵的條件。
如果前面的條件都不成立,則執行ELSE後面的代碼n 。
上面提到的IF形式每次只進行一個條件的判斷,如果這個條件成立,則執行相應的代碼,否則繼續判斷下麵的條件。
有時候需要一次判斷多個條件,根據多個條件的綜合情況執行相應的代碼,這就要用到條件的聯合。
條件的聯合有“與”和“或”兩種形式。
“與”運算通過AND運算符連接多個條件,只有當所有條件都成立時,整個條件判斷才算成立。
如果有一個條件不成立,則整個條件判斷不成立。
“與”運算的格式為:
條件1 AND 條件2 AND 條件3 ...
例如,要計算1+2+3 +…+ 100的值,當和大於500時停止,求正好使和大於500 的最後一個整數。
這時可以構造兩個條件,其中一個條件要求求和的數據小於等於100 ,另一個條件要求求和的結果小於等於500 ,只要這兩個條件同時滿足,就可以繼續求和。
只要其中一個條件不滿足,則求和停止。
用於求和的PL/SQL塊的代碼如下所示。
在塊中用到了LOOP迴圈。
DECLARE
i INTEGER:=0;
total INTEGER:=0;
BEGIN
LOOP
IF i<=100 and total<=500 THEN --如果兩個條件都滿足,則繼續迴圈
i:=i+1;
total:=total+i;
ELSE --只要一個條件不滿足,則退出迴圈,計算結束
EXIT;
END IF;
END LOOP;
dbms_output.put_line(i);
END;
LOOP語句
LOOP是一種迴圈語句,它使一部分代碼反覆執行。
LOOP語句的基本格式為:
LOOP
迴圈體
END LOOP;
如果不做特殊處理, LOOP中的代碼將無限制地執行。
一般可以用EXIT WHEN或者EXIT語句結束LOOP迴圈。
EXIT WHEN指定一個條件,當條件滿足時退出迴圈。
EXIT語句使迴圈結束,一般與IF語句結合使用。
例如,要計算1+2+3+…的值,當和大於500時停止,求正好使
和大於500的最後一個整數,代碼如下:
DECLARE
i INTEGER:=0;
total INTEGER:=0;
BEGIN
LOOP
i:=i+1;
total:=total+i;
EXIT WHEN total > 500;
END loop;
dbms_output.put_line(i);
END;
在上述例子中,語句EXIT WHEN total > 500使得當求和結果大於500時停止迴圈。
這條語句可以用EXIT語句代替,這時需要用IF語句判斷和是否大於500:
IF total>500 THEN
EXIT;
END IF;