標籤:n+1 tle ber 而且 into else comment 計數器 文法
介紹 PL/SQL 的流程式控制制語句, 包括如下三類:
1、控制語句: IF 語句
2、迴圈語句: LOOP 語句, EXIT 語句
3、順序語句: GOTO 語句, NULL 語句
一 條件陳述式
IF <布林運算式> THENPL/SQL 和 SQL 陳述式;END IF;
IF <布林運算式> THENPL/SQL 和 SQL 陳述式;ELSE其它語句;END IF; IF <布林運算式> THENPL/SQL 和 SQL 陳述式;ELSIF < 其它布林運算式> THEN其它語句;ELSIF < 其它布林運算式> THEN其它語句;ELSE其它語句;END IF;
提示: ELSIF 不能寫成 ELSEIF
例 1:
DECLAREv_empno emp.empno%TYPE; V_salary emp.sal%TYPE; V_comment VARCHAR2(35);
BEGINSELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
IF v_salary<1500 THENV_comment:= ‘Fairly less’;ELSIF v_salary <3000 THENV_comment:= ‘A little more’;ELSEV_comment:= ‘Lots of salary’;END IF;DBMS_OUTPUT.PUT_LINE(V_comment);END;
二、CASE
運算式
CASE selectorWHEN expression1 THEN result1WHEN expression2 THEN result2WHEN expressionN THEN resultN[ ELSE resultN+1]END;
DECLAREV_grade char(1) ;V_appraisal VARCHAR2(20);BEGINV_appraisal :=CASE v_gradeWHEN ‘A’ THEN ‘Excellent’WHEN ‘B’ THEN ‘Very Good’WHEN ‘C’ THEN ‘Good’ELSE ‘No such grade’END;DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal);END;
三 迴圈
1、簡單迴圈
LOOP要執行的語句;EXIT WHEN <條件陳述式> ; /*條件滿足,退出迴圈語句*/END LOOP;
例 3.
DECLAREint NUMBER(2) :=0;BEGIN LOOPint := int + 1;DBMS_OUTPUT.PUT_LINE(‘int 的當前值為:‘||int);
EXIT WHEN int =10;END LOOP END
2、WHILE 迴圈(相較 1,推薦使用 2)
WHILE <布林運算式> LOOP要執行的語句;END LOOP;
例 4.
DECLAREx NUMBER :=1;BEGINWHILE x<=10 LOOP
DBMS_OUTPUT.PUT_LINE(‘X 的當前值為:‘||x); x:= x+1;END LOOP;
END;
3、數字式迴圈
FOR 迴圈計數器 IN [ REVERSE ] 下限 .. 上限 LOOP要執行的語句;END LOOP;
每迴圈一次,迴圈變數自動加 1;使用關鍵字 REVERSE,迴圈變數自動減 1。跟在 IN REVERSE 後面的數字必須是從小到大的順序,而且必須是整數,不能是變數或運算式。可以使用 EXIT 退出迴圈。
例 5.
BEGINFOR int in 1..10 LOOP DBMS_OUTPUT.PUT_LINE(‘int 的當前值為: ‘||int);END LOOP;
end
例 6.
CREATE TABLE temp_table(num_col NUMBER);DECLAREV_counter NUMBER := 10;BEGININSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN 20 .. 25 LOOPINSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP;INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN REVERSE 20 .. 25 LOOPINSERT INTO temp_table (num_col ) VALUES ( v_counter );END LOOP;END ;
三、標號和 GOTO
PL/SQL 中 GOTO 語句是無條件跳轉到指定的標號去的意思。文法如下:
GOTO label;
<<label>> /*標號是用<< >>括起來的標識符 */
例 7:
DECLAREV_counter NUMBER := 1;BEGINLOOPDBMS_OUTPUT.PUT_LINE(‘V_counter 的當前值為:‘||V_counter); V_counter := v_counter + 1;IF v_counter > 10 THEN GOTO l_ENDofLOOP;END IF; END LOOP;<<l_ENDofLOOP>>DBMS_OUTPUT.PUT_LINE(‘V_counter 的當前值為:‘||V_counter);END ;
四、NULL 語句
在 PL/SQL 程式中,可以用 null 語句來說明“不用做任何事情”的意思,相當於一個預留位置,可以使某些語句變得有意義,提高程式的可讀性。如:
DECLARE. . .BEGIN…IF v_num IS NULL THENGOTO print1;END IF;…<<print1>>NULL; -- 不需要處理任何資料。END;
oracle資料庫之PL/SQL 流程式控制制語句