本節要點:
l 迴圈結構控制語句
pl/sql既然是面向過程的程式語言,那麼它就有針對邏輯的控制語句,這些語句在日常的pl/sql程式設計中起著很重要的作用,可以完成業務邏輯的框架部分。下面就來介紹pl/sql的邏輯控制語句。
1選擇結構控制語句
1.1if條件控制語句
條件控制語句就是根據當前某個引數的值來判斷進入哪乙個流程,這就好像做選擇題一樣,當滿足某個條件時就進入對應的流程,否則進入另乙個流程。
語法:if condition then
statements;
[elsif condition then
statements;]
[else
statements;]
end if;
注意:elsif子句的關鍵字是乙個單詞,不能寫成「elseif」或「else if」
示例:編寫pl/sql語句塊,根據所購買圖書的零售價,然後確定在發貨時應該包括的禮品。
declare
v_gift varchar2(20);
c_retailprice number(5,2):=&price;
begin
if c_retailprice>56 then
v_gift:='free shipping';
elsif c_retailprice>25 then
v_gift:='bookcover';
elsif c_retailprice>12 then
v_gift:='box of book labels';
else
v_gift:='bookmarker';
end if;
dbms_output.put_line('the gift for a book costing '||c_retailprice||' is a '||v_gift);
end示例:請按以下對應關係,根據成績的不同,列印出對應的級別
>90 a
>80 b
>70 c
>=60 d
<60 e
declare
v_grade varchar2(20);
c_score number(5, 2) := &score;
begin
if c_score > 90 then
v_grade := 'a';
elsif c_score > 80 then
v_grade := 'b';
elsif c_score > 70 then
v_grade := 'c';
elsif c_score >= 60 then
v_grade := 'd';
elsif c_score < 60 then
v_grade := 'e';
else
v_grade := 'error put in';
end if;
dbms_output.put_line('the grade is ' || v_grade);
end;
1.2case語句
case語句同if語句類似,也是根據條件選擇對應的語句執行。
語法:case selector
when expression1 then result1
when expression2 then result2
when expressionn then resultn
[ else resultn+1]
end;
示例:根據不同的輸入列印不同的資訊
declare
v_grade char(1) := upper('&p_grade');
begin
end;
2迴圈結構控制語句
希望反覆執行pl/sql塊的可執行部分中的語句。建立乙個迴圈,其中包括要執行的語句,這個迴圈一直重複,直到滿足某個條件為止,這時將會退出迴圈。有三種型別的迴圈,你可以在pl/sql塊的可執行部分使用它們,以便重複執行一組語句:
2.1基本loop迴圈
語法:loop
statements;
exit [when condition];
end loop;
注意:因為要執行的語句之後列出了exit的關鍵字,所以迴圈中任何語句至少自動執行一次。這被稱為「後測試」(post-test)。在執行語句之後,將評估exit子句中列出的任何條件,如果新增為true,那麼迴圈將會結束,然後將執行pl/sql塊的其餘部分。
示例:建立乙個列印一系列數字的迴圈。
declare
v_counter number(1) := 0;
begin
loop
v_counter := v_counter + 1;
dbms_output.put_line('the current value of the counter is ' ||
v_counter);
exit when v_counter = 4;
end loop;
end;
示例:列印1-10之間的偶數
declare
v_counter number(2) := 1;
begin
loop
if mod(v_counter, 2) = 0 then
dbms_output.put_line('the current value of the counter is ' ||
v_counter);
end if;
v_counter := v_counter + 1;
exit when v_counter > 10;
end loop;
end;
2.2for迴圈
語法:for counter in[reverse] lower_limit..upper_limit loop
statements;
end loop;
示例:for迴圈使用i作為迴圈計數器,in關鍵字指定範圍
begin
for i in 1 .. 10 loop
dbms_output.put_line('the current value of the counter is ' || i);
end loop;
end;
2.3while迴圈
執行一系列語句,直到條件變為false為止。與前面迴圈不同,如果條件最初為false,那麼永遠不能進入這個迴圈。 在while子句提供的條件決定了迴圈將在何時終止。
語法:while condition loop
statements;
end loop;
示例:pl/sql塊中使用while迴圈來顯示變數的值,直到指定的條件為false為止。
declare
v_counter number(2):=0;
begin
while v_counter<15 loop
dbms_output.put_line('the current value of the counter is '||v_counter);
v_counter:=v_counter+1;
end loop;
end;
示例:請列印出1~10之間的偶數(注:請用while loop的語法實現)
declare
v_counter number(2) := 1;
begin
while v_counter <= 10 loop
if mod(v_counter, 2) = 0 then
dbms_output.put_line('the current value of the counter is ' ||v_counter);
end if;
v_counter := v_counter + 1;
end loop;
end;
2.4巢狀迴圈
任何型別的迴圈都可以巢狀在另乙個迴圈中。
注意:在控制返回外部迴圈之前,必須完成內部迴圈的執行。在控制返回迴圈之後,只要外部迴圈的條件有效,就會再次執行外部迴圈,這包括了內部迴圈的執行。這個過程將一直繼續,直到外部迴圈結束為止。
示例:pl/sql塊包含了乙個巢狀的for迴圈
declare
v_counter number(2):=0;
begin
while v_counter<3 loop
for i in 1..2 loop
dbms_output.put_line('the current value of the for loop counter is '||i);
end loop;
dbms_output.put_line('the current value of the while counter is '||v_counter);
v_counter:=v_counter+1;
end loop;
end;
PL SQL 迴圈控制語句
判斷語句 if.else declare v age number not null 50 beginif0 v age and v age 18 then dbms output.put line 兒童 elsif 18 v age and v age 30 then dbms output.pu...
PLSQL基本控制語句
根據員工號,查詢員工薪水 declare v empno emp.empno type v sal emp.sal type begin v empno 7369 select sal into v sal from emp where empno v empno dbms output.put l...
PL SQL之 流程控制語句
一 簡介 像程式語言一樣,oracle pl sql也有自己的流程控制語句。通過流程控制語句,我們可以在pl sql中實現一下比較複雜的業務邏輯操作。而無需到程式中去控制,在一定程度上提高了效率,這也是pl sql的強大之處。pl sql流程控制語句有如下幾種 二 語句種類 1 控制語句 a if語...