oracle資料庫之PL/SQL 流程式控制制語句

來源:互聯網
上載者:User

標籤: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 流程式控制制語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.