條件分支語句 • IF 語句: –IF-THEN-END IF –IF-THEN-ELSE-END IF –IF-THEN-ELSIF-END IF –case語句: •
迴圈語句 –
loop
文法:
<pre name="code" class="plain">IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statements;] END IF; </pre><p>
condition 是一個布爾變數或運算式 (值為TRUE, FALSE或NULL) (僅當運算式為TRUE時執行
THEN 之後的語句)。
THEN 是一個子句,與前面的布林運算式相聯絡。
statements 是 若干個PL/SQL 或 SQL 陳述式 (語句中可能還有嵌套的IF 語句)。
ELSIF 這個關鍵字將引入一個布林運算式 (如果第一個條件結果為FALSE或NULL,ELSEIF 關鍵
字將引出附加的選擇條件) 。
ELSE 如果IF條件不成立則執行ELSE關鍵字後面的語句。
NULL的處理DECLARE • x number(2):= 5;<br />y number(2):= NULL;<br />BEGIN<br />IF x != y THEN<br /> dbms_output.put_line(100);<br />ELSE<br /> dbms_output.put_line(200);<br />END IF;<br />END;
任何包含空值的算術運算式結果均為空白值。
僅當變數值為NULL時,IS NULL 的傳回值是 TRUE 。
可把空變數當作Null 字元串來串連運算式。
DECLARE<br /> x number(2):=null;<br /> y number(2):=null;<br /> begin<br /> if x!=y then<br /> dbms_output.put_line(100);<br /> else<br /> dbms_output.put_line(200);<br /> end if;<br /> end; </p><p>DECLARE<br /> x number(2):=null;<br /> y number(2):=null;<br /> begin<br /> if x=y then<br /> dbms_output.put_line(100);<br /> else<br /> dbms_output.put_line(200);<br /> end if;<br /> end;
都輸出200DECLARE<br /> x number(2):=5;<br /> y number(2):=null;<br /> begin<br /> if nvl(x,0)!=nvl(y,0) then<br /> dbms_output.put_line(100);<br /> else<br /> dbms_output.put_line(200);<br /> end if;<br /> end;
輸出100
邏輯表:
CASE語句
文法:CASE<br /> selector<br /> WHEN expression1 THEN result1<br /> WHEN expression2 THEN result2...<br /> WHEN expressionN THEN resultN<br /> [ELSE resultN+1;]<br />END;<br /><br />DECLARE<br /> v_var varchar2(10);<br /> v_deptno emp.deptno%type;<br />BEGIN<br /> SELECT deptno into v_deptno<br /> from emp<br /> where sal=(select max(sal) from emp);<br /> v_var:=<br /> case v_deptno<br /> when 10 then '部門1'<br /> when 20 then '部門2'<br /> else '部門3'<br /> END;<br /> dbms_output.put_line(v_var);<br />END;
迴圈控制: LOOP
語句
•
LOOP 語句有三種形式: –
Basic loop 無條件的迴圈 –
FOR loop 有計數的迴圈 –
WHILE loop 有條件的迴圈 ––
EXIT 是強制結束迴圈的語句
BASIC LOOP:
無條件迴圈的特點是迴圈體至少執行一次
LOOP<br /> statement1; . . .<br />EXIT [WHEN condition];<br />END LOOP;
FOR LOOP:
FOR loop的結構大致與 Basic Loop相同。只是,
FOR loop語句的前端有一個控制語句,這個控制語句來決定PL/SQL執行迴圈的次數
FOR<br />counter in [REVERSE] lower_bound..upper_bound LOOP<br />statement1;<br />statement2;<br /> . . .<br />END LOOP;
WHILE LOOP:
WHILE<br /> condition LOOP<br /> statement1;<br /> statement2;<br /> . . .<br />END LOOP;WHILE loop 是在條件為真的情況下迴圈執行一系列語句。 WHILE loop 迴圈是在執行一系列語句之前判斷條件即先判斷後執行。當條件為假時結束迴圈。如果一開始條件就為假,則一次也不執行這些代碼。
附註:如果條件為NULL,迴圈終止,控制跳到下一個語句。
GOTO語句:
BEGIN<br /> dbms_output.put_line(1);<br /> GOTO l_last_line;<br /> dbms_output.put_line(2);<br />return;<br /><<l_last_line>><br />dbms_output.put_line(3);<br />END;•不能GOTO到嵌套塊內部的標籤
•IF子句外部執行的語句,不能GOTO到IF子句內部的標籤
•IF子句內部執行的語句,不能GOTO到另一個IF子句內部的標籤
•不能從異常處理部分GOTO到代碼其它部分