控制結構
和其他程式語言一樣,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之旅】控制結構和註解
- Python入門(六):程式控制結構Python
- python程式的三種控制結構Python
- Go基礎系列:流程控制結構Go
- WPF控制元件結構與Content理解控制元件
- Java流程控制02:順序結構Java
- 控制你的DTO資料結構 - DZone資料結構
- Python學習手冊之控制結構(二)Python
- Perl語言學習(四)Perl控制結構
- python中程式控制結構包括哪幾種Python
- Go新手容易踩的坑(控制結構相關)Go
- 黑猴子的家:mysql 流程控制之分支結構MySql
- 電商系統架構總結4(webapi 版本控制)架構WebAPI
- PG的物理儲存結構、版本控制、空間回收
- Go語言流程控制之迴圈結構篇Go
- shell指令碼程式設計之選擇控制結構指令碼程式設計
- 【知識分享】Python中常見的三大控制結構!Python
- 學與思1——控制單元與大腦結構?
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- 入門篇-其之十-流程控制之迴圈結構
- Java流程控制:使用者互動Scanner、選擇結構Java
- JVM指令分析例項二(算術運算、常量池、控制結構)JVM
- ABB機器人維修IRC5控制器結構剖析機器人
- x86架構中的外部中斷結構-Part 1:中斷控制器的演化架構
- 結構化與非結構化
- WiFi基礎(五):802.11幀結構與WiFi控制幀、管理幀、資料幀WiFi
- 03【若依框架解讀】Tree樹形結構的控制(選單,部門)框架
- 尚矽谷MySQL學習筆記(Day_6)-流程控制結構介紹MySql筆記
- 智慧控制技術總結
- 順序結構與選擇結構
- python分支結構與迴圈結構Python
- 結構體中套用其他_結構體結構體
- 前端資料結構--線性結構-連結串列前端資料結構
- 資料結構知識點--儲存結構與邏輯結構資料結構
- 樹結構總結
- Envoy Proxy構建控制平面指南