天天看點

存儲過程之流程控制語句

條件控制     IF條件:條件為真,執行     CASE條件:比對到,執行 循環控制     WHILE循環:先判斷後執行     REPEAT循環:先執行後判斷     LOOP循環(死循環)     LEAVE語句(離開)     ITERATE語句:疊代,再次循環     RETURN語句:傳回

注意:MySQL不支援FOR循環

一、條件控制:if語句、case語句

  如果條件search_condition_1為true,則執行相應的then子句後面的語句清單statement_list_1;

  如果條件search_condition_1不為true,則判斷ELSEIF子句中的條件search_condition_2是否為true,如果為true,則執行相應的then子句後面的語句清單statement_list_2;

  ……

  如果所有的條件都不為true,則執行ELSE子句後面的語句。

例1:建立過程,判斷兩個輸入參數哪一個大

解析:輸入的第一個參數對應p1,第二個對應p2,@ax用來接收輸出變量p3;如果p1>p2,輸出1;如果p1=p2,輸出2;其他情況,輸出3。

例2:建立過程,表示出players表和penalties表哪一個行數更多--->IF條件中允許包含标量子查詢

1)simple case:簡易case語句

case_value是一個表達式,該值和每個when子句中的when_value值進行相等比較:

  ①如果和某個when子句中的when_value值相等,則執行相應的then子句後面的語句statement_list;

  ②如果沒有when_value值相等,則執行else子句後面的statement_list。

2)searched case:檢索型case語句

對于每個when子句,判斷後面的布爾表達式search_condition是否為true:

  ①如果某個when子句的條件為true,則執行相應的then子句後面的語句statement_list;

  ②如果所有的when子句的條件都不為true,則執行else後面的語句statement_list。

注意:

  ①如果在case中,沒有一個when子句的比較結果為true,并且沒有寫else部分,那麼就抛出異常:‘Case not found for CASE statement’;

  ②statement_list如果有多條語句,使用begin…end塊包圍起來(複合語句)。

二、循環控制:while循環、repeat循環、loop循環、leave語句、iterate語句

Tips:循環體結構

  ①條件

  ②SQL語句體

  ③程式體裡面需要對條件中的變量進行處理

首先判斷循環開始條件search_condition是否為true(循環結束條件):

  如果為true,則執行循環體中的語句statement_list。每執行完一次,都要重新判斷條件search_condition是否為true;

  如果條件search_condition為false,則循環結束。

特點:

  先判斷,後執行

反複執行循環體中的語句statement_list,直到until條件search_condition 為true時,循環結束

  先執行,後判斷

@x:使用者變量,直接使用“set @x=0;”就可以生成這麼一個變量,不需要資料類型,在存儲過程裡定義的使用者變量,存儲過程外面可以通路,一直被儲存。

  反複執行循環體中的語句,直到循環結束;

  循環的結束使用leave語句。

例:建立過程,等待指定的秒數後結束

 作用:用來退出帶标簽的語句塊或者循環

用處:用在 BEGIN ... END中或者循環中 (LOOP, REPEAT, WHILE)

例:建立過程,其中的一個語句塊較早的結束

ITERATE  label;

隻能出現在循環LOOP、REPEAT和WHILE 中(有标簽)

含義:跳出本次循環,開始一次新的循環

| @x   |

本文轉自zsdnr 51CTO部落格,原文連結:http://blog.51cto.com/12942149/1949799,如需轉載請自行聯系原作者

+------+

|   10 |