ORACLE PL/SQL練習(三)

布爾直接量ide


DECLAREurl

    enough_money BOOLEAN;         -- 聲明一個布爾類型變量spa

BEGINorm

    enough_money := FALSE;     -- 給這個變量賦值it

END;      io


檢查布爾表達式的值無需引用這些直接量,只讓表達式本身說就能夠了。table

DECLAREclass

    enough_money BOOLEAN;變量

BEGINselect

    IF enough_money 

    THEN

    ... ...

   

   

IF語句有三種使用方法:

IF類型 特色
IF THEN END IF;

最簡單的用法,IF和THEN之間的條件決定了THEN和END IF之間的一系列語句是否會被執行,若是條件部分的求值結果是FALSE或NULL,這些代碼就不會執行。

IF THEN ELSE END IF;

實現了二選一的邏輯。根據對位於IF和THEN之間的條件的求值結果,或者是THEN和ELSE之間的代碼被執行,或者是ELSE和END IF之間的代碼被執行。總之,這兩部分代碼確定有一個會被執行。

IF THEN ELSIF ELSE END IF;

最複雜的形式。IF語句會從一系列互斥條件中選擇一個是TRUE,而後執行該條件關聯的語句。ORACLE 9iR1以後,建議用CASE替代。


短路求值:

PL/SQL使用短路求值方法,也就是說PL/SQL不須要對一個IF語句中的全部表達式都去求值。


將代價昂貴的條件放在整個條件集的最後

IF low_CPU_condition AND high_CPU_condition

THEN

...

END IF;


嵌套IF語句也能實現短路求值同樣的效果

IF low_CPU_condition

THEN

IF high_CPU_condition

THEN

...

END IF;

END IF;


只有在low_CPU_condition是TRUE的前提下,high_CPU_condition纔會被求值,一樣實現了短路效果。


CASE語句和表達式


區別:CASE表達式的結果就是一個值,CASE語句的結果是執行一系列的PL/SQL語句。


簡單CASE語句:經過值來關聯一個或多個PL/SQL語句,根據表達式的返回值來選擇哪個語句會被執行。

搜索形式的CASE語句:根據一系列布爾條件來肯定要執行的PL/SQL語句系列。那些和第一個求值結果是TRUE的

條件相關聯的語句會被執行。



簡單CASE語句


CASE employee_type

WHEN 'S' THEN

award_salary_bonus(employee_id);

WHEN 'H' THEN

award_hourly_bonus(employee_id);

WHEN 'C' THEN

award_commissioned_bonus(employee_id);

ELSE                                        -- ELSE子句是可選的

RAISE invalid_employee_type;

END CASE;


若是沒有明確指定ELSE子句,PL/SQL會隱含的使用下面的方法。

ELSE

RAISE CASE_NOT_FOUND;

即若是沒有明確地使用ELSE子句,並且有沒有WHEN子句可以匹配CASE表達式的結果,PL/SQL就會拋出一個

CASE_NOT_FOUND的錯誤。


用CASE語句來實現津貼發放邏輯

CASE TRUE

WHEN salary >= 10000 AND salary <= 20000

THEN

give_bonus(employee_id,1500);

WHEN salary > 20000 AND salary <= 40000

THEN

give_bonus(employee_id,1000);

WHEN salary > 40000

THEN

give_bonus(employee_id,500);

ELSE

give_bonus(employee_id,0);

END CASE;

爲了不出現CASE_NOT_FOUND錯誤,必定要確保至少有一個條件會知足。


CASE語句的規則:

①一旦某些語句被執行,整個執行也就結束了。即使有多個表達式結果都是TRUE,也只有和第一個表達式相關連的語句會被執行;

②ELSE語句是可選的,若是沒有指定ELSE,而且沒有一個表達式的求值結果是TRUE,就會拋出CASE_NOT_FOUND異常。

③WHEN表達式是按照從上到下的次序依次求值。


CASE表達式

分兩種:

簡單CASE表達式

搜索形式CASE表達式




NULL語句

有時但願PL/SQL不要作任何事

格式:

NULL;


場景:

1.增長程序可讀性:

IF :report_mgr.selection = 'DETAIL'

THEN

exec_detail_report

ELSE

NULL;    -- Do nothing

END IF;

相關文章
相關標籤/搜索