控制結構
和其他程式語言一樣,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.
這裡主要講下分支判斷結構。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.
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.
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.
例子:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 控制檔案的結構
- GO語言————5.1 控制結構之if-else結構Go
- ### 流程控制語句結構
- 流程控制語句結構
- 【Scala之旅】控制結構和註解
- PHP實踐之路(六)控制結構PHP
- 10,其他控制結構(perl筆記)筆記
- tcl/tk參考——控制結構catch
- tcl/tk參考——控制結構errorError
- Go基礎系列:流程控制結構Go
- python程式的三種控制結構Python
- Python入門(六):程式控制結構Python
- PHP系列(一)PHP流程控制結構PHP
- oracle 體系結構-控制檔案(二)Oracle
- Oracle 體系結構-控制檔案(一)Oracle
- 程式語言基本組成:控制結構
- 控制結構與函式練習(一)函式
- 控制結構與函式練習(二)函式
- 控制結構與函式練習(三)函式
- Java流程控制02:順序結構Java
- Perl語言學習(四)Perl控制結構
- 控制你的DTO資料結構 - DZone資料結構
- Python3控制結構與函式Python函式
- 程式控制塊PCB結構 task_struct 描述Struct
- C#實驗3--基本控制結構C#
- oracle的case函式和case控制結構Oracle函式
- WPF控制元件結構與Content理解控制元件
- python中程式控制結構包括哪幾種Python
- Python學習手冊之控制結構(二)Python
- 電商系統架構總結4(webapi 版本控制)架構WebAPI
- VS2005入門之控制結構
- shell程式設計控制結構expr/let/for/while/until程式設計While
- Go新手容易踩的坑(控制結構相關)Go
- Platform SDK 中控制系統音量的重要結構MIXERCONTROLDETAILS結構體定義 (轉)PlatformAI結構體
- 黑猴子的家:mysql 流程控制之分支結構MySql
- PG的物理儲存結構、版本控制、空間回收
- shell指令碼程式設計之選擇控制結構指令碼程式設計
- 學與思1——控制單元與大腦結構?