MySql儲存(邏輯判斷/條件控制/迴圈控制)
阿新 • • 發佈:2019-01-28
同編寫程式類似,儲存過程中也有對應的條件判斷,功能類似於if、switch。在MySql裡面對應的是IF和CASE
1、IF判斷
IF判斷的格式是這樣的:
- IF expression THEN commands
- [ELSEIF expression THEN commands]
- [ELSE commands]
- END IF;
然後下面是我們的儲存過程:
儲存過程的話有兩個輸入引數,第一個isTaxed表示是不是要帶稅價格,第二個是產品的名稱;在儲存過程裡面定義了兩個變數,finalPrice用來儲存價格,而taxRate表示稅率。這裡程式碼比較簡單,就是判斷下如果是要加稅,就把原來的價格乘上稅率。下面是測試結果:
true的情況表示是帶稅的價格。好了這個是使用IF的一個例子,下面看看CASE;
2、CASE的使用
同程式設計裡面的那個switch ....case.....類似,使用CASE同程式設計一樣也是當判斷比較多時便於閱讀和維護,我們也來看下CASE的語法:
下面我們假設不同型別的商品對應的稅收稅率是不一樣的情況來看個例子,這裡假設甜點的稅率是0.05,奶製品的是0.1,傢俱類的是0.2:,下面是儲存過程:
上面增加了一個儲存產品型別的一個變數proType,用來儲存商品型別。然後使用CASE來進行判斷來設定稅率,下面是測試的部分:
可以看到沙發的價格是1250*1.2=1500,而蛋糕的價格是10*1.05 = 10.5
在MySql的儲存過程中可使用的迴圈有三種:WHILE、REPEAT、LOOP
1、WHILE
WHILE的格式是這樣的:
- WHILE expression DO
- Statements
- END WHILE
- DELIMITER $$
-
DROPPROCEDURE IF EXISTS `test`.`WhileLoopProc` $$
- CREATEPROCEDURE `test`.`WhileLoopProc` ()
- BEGIN
- DECLARE x INT;
- DECLARE str VARCHAR(255);
- SET x = 1;
- SET str = '';
- WHILE x <= 5 DO
- SET str = CONCAT(str,x,',');
- SET x = x + 1;
- END WHILE;
- SELECT str;
- END $$
- DELIMITER ;
2、REPEAT
REPEAT的格式是這樣的:
- REPEAT
- Statements;
- UNTIL expression
- END REPEAT
3、LOOP 及 LEAVE、ITERATE
這裡LOOP用來標記迴圈;而LEAVE表示離開迴圈,好比程式設計裡面的break一樣;ITERATE則繼續迴圈,型別與程式設計裡面的continue。
- DELIMITER $$
- DROPPROCEDURE IF EXISTS `test`.`LoopProc` $$
- CREATEPROCEDURE `test`.`LoopProc` ()
- BEGIN
- DECLARE x INT;
- DECLARE str VARCHAR(255);
- SET x = 1;
- SET str = '';
- loop_label: LOOP
- IF x > 10 THEN
- LEAVE loop_label;
- END IF;
- SET x = x + 1;
- IF (x mod 2) THEN
- ITERATE loop_label;
- ELSE
- SET str = CONCAT(str,x,',');
- END IF;
- END LOOP;
- SELECT str;
- END $$
- DELIMITER ;