控制結構

jane_pop發表於2014-09-19
和其他程式語言一樣,pl/sql中也存在控制結構:順序結構,分支判斷結構,迴圈結構。
這裡主要講下分支判斷結構。pl/sql中的分支判斷結構主要可以分為兩類:一類是IF ... ELSE 型別的,另外一類就是CASE...
1.簡單的分支判斷
IF ...
 THEN...
END IF;
例子:
DECLARE
      v_myage NUMBER:=31;
BEGIN
      IF v_myage<11  
      THEN 
          DBMS_OUTPUT.PUT_LINE('I am a child!');
      END IF;
END;
/
2.兩重分支判斷
IF...
  THEN...
   ELSE...
END IF;
例子:
DECLARE
      v_myage NUMBER:=31;
BEGIN
      IF v_myage<11  
      THEN 
          DBMS_OUTPUT.PUT_LINE('I am a child!');
     ELSE
         DBMS_OUTPUT.PUT_LINE('I am not a child!');

      END IF;
END;
/
執行結果:
HR@orcl 18-SEP-14>@s10
I am not a child!

PL/SQL procedure successfully completed.

3.多重分支判斷(要注意,不是ELSEIF,而是ELSIF!)
IF...
  THEN...
  ELSIF...
  THEN...
   ELSIF...
  THEN...
  ...
  ELSE...
END IF;
例子:
DECLARE
      v_myage NUMBER :=55;
BEGIN
      IF v_myage<11 THEN
         DBMS_OUTPUT.PUT_LINE('I am a child!');
      ELSIF v_myage<20 THEN
         DBMS_OUTPUT.PUT_LINE('I am young!');
      ELSIF v_myage<30 THEN
         DBMS_OUTPUT.PUT_LINE('I am in my twenties!');
      ELSIF v_myage<40 THEN
          DBMS_OUTPUT.PUT_LINE('I am in my thirties!');
      ELSE
           DBMS_OUTPUT.PUT_LINE('I am always young!');
    END IF;
END;
/
執行結果:
HR@orcl 18-SEP-14>@s11
I am always young

PL/SQL procedure successfully completed.

這裡要注意有兩種型別:simple if statement和null value in if statement。如果if判斷的變數值為null或者false,那麼if...then...後面的語句是不進行的,而會執行else後面的語句。下面舉個例子:
DECLARE
     v_myage number;
BEGIN
     IF v_myage<11 THEN
        DBMS_OUTPUT.PUT_LINE('I am a child');
     ELSE
        DBMS_OUTPUT.PUT_LINE('I am not a child');
   END IF;
END;
/
執行結果:
HR@orcl 18-SEP-14>@s12.sql
I am not a child

PL/SQL procedure successfully completed.

下面講講CASE型別的,分為兩類:Simple Case Expressions,Searched Case Expressions
1.simple case expression:實際上就是在case後面直接給出變數
例子:
SET VERIFY OFF
DECLARE
     v_grade char(10) :=UPPER('&grade');
     v_appraisal VARCHAR2(20);
BEGIN
    v_appraisal :=CASE v_grade
          WHEN '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;
/
執行結果:
HR@orcl 18-SEP-14>@case1
Enter value for grade: a
Grade:A            AppraisalExcellent

PL/SQL procedure successfully completed.

2.searched case expressions:實際上就是在CASE後不直接給出變數,而是在when後面給出變數,然後根據變數的值做出判斷。
例子:
SET VERIFY OFF
DECLARE
     v_grade char(10) :=UPPER('&grade');
     v_appraisal VARCHAR2(20);
BEGIN
    v_appraisal :=CASE
          WHEN v_grade='A'  THEN 'Excellent'
          WHEN v_grade='B'   THEN 'Very Good'
          WHEN v_grade='C'   THEN 'Good' 
          ELSE 'No such grade'
  END;
DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||'   Appraisal:'||v_appraisal);
END;
/

執行結果和上面的pl/sql是一樣的:
HR@orcl 18-SEP-14>@case2
Enter value for grade: a
Grade:A            Appraisal:Excellent

PL/SQL procedure successfully completed.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29800581/viewspace-1274240/,如需轉載,請註明出處,否則將追究法律責任。

相關文章