1. 分類
- 順序結(jié)構(gòu):程序從上往下一次執(zhí)行
- 分支結(jié)構(gòu):程序從兩條或多條路徑中選擇一條去執(zhí)行
- 循環(huán)結(jié)構(gòu):程序在滿足一定條件的基礎(chǔ)上呆贿,重復(fù)執(zhí)行一段代碼
2. 分支結(jié)構(gòu)
if 函數(shù)
- 功能:實現(xiàn)簡單的雙分支
- 語法:
IF (表達(dá)式1, 表達(dá)式2, 表達(dá)式3)
- 執(zhí)行順序:如果表達(dá)式1成立收班,則 IF 函數(shù)返回表達(dá)式2的值润樱,否則返回表達(dá)式3的值
case結(jié)構(gòu)
1. 類似于java中的 switch 語句赋除,一般用于實現(xiàn)等值判斷
CASE 變量|表達(dá)式|字段
WHEN 要判斷的值1 THEN 返回值1或語句1
WHEN 要判斷的值2 THEN 返回值2或語句2
...
ELSE 返回值n或語句n
END CASE ;
2. 類似于java中的多重 IF 語句掸鹅,一般用于實現(xiàn)區(qū)間判斷
CASE
WHEN 要判斷的條件1 THEN 返回值1或語句1
WHEN 要判斷的條件2 THEN 返回值2或語句2
...
ELSE 返回值n或語句n
END CASE ;
- 特點
既可以作為表達(dá)式被辑,嵌套在其他語句中使用制恍,此時任何位置都可以使用
也可以作為獨立的語句去使用,此時只能用于 BEGIN END 中
如果 when 中的值滿足或條件成立宽菜,則執(zhí)行對應(yīng)的 THEN 后的語句谣膳,并且結(jié)束 CASE
如果都不滿足,則執(zhí)行 ELSE 中的語句或值
ELSE 可以省略铅乡,此時如果所有的 WHEN 都不滿足继谚,則返回 NULL
if 結(jié)構(gòu)
- 功能:實現(xiàn)多重分支
- 語法:
IF 條件1 THEN 語句1 ;
ELSEIF 條件2 THEN 語句2 ;
...
ELSE 語句n ;
END IF ;
- 使用條件:只能放在 BEGIN END 中
實例
創(chuàng)建存儲過程:根據(jù)傳入的成績來顯示等級
CREATE PROCEDURE pro1 (IN score INT)
BEGIN
CASE
WHEN score >= 90
THEN SELECT 'A' ;
WHEN score >= 80
THEN SELECT 'B' ;
WHEN score >= 60
THEN SELECT 'C' ;
ELSE SELECT 'D' ;
END CASE ;
END $
CREATE FUNCTION fun_ko (score INT) RETURNS CHAR
BEGIN
DECLARE result CHAR ;
IF score >= 90 THEN SELECT 'A' INTO result ;
ELSEIF score >= 80 THEN SELECT 'B' INTO result ;
ELSEIF score >= 60 THEN SELECT 'C' INTO result ;
ELSE SELECT 'D' INTO result ;
END IF ;
RETURN result ;
END $
3. 循環(huán)結(jié)構(gòu)
分類
- while
標(biāo)簽 :
WHILE
循環(huán)條件 DO 循環(huán)體 ;
END WHILE 標(biāo)簽;
- loop(可模擬簡單的死循環(huán))
標(biāo)簽 :
LOOP
循環(huán)體 ;
END LOOP 標(biāo)簽;
- repeat
標(biāo)簽 :
REPEAT
循環(huán)體 ;
UNTIL 結(jié)束循環(huán)的條件
END REPEAT 標(biāo)簽;
循環(huán)控制
- iterate:作用類似于continue
- leave:作用類似于break
實例
批量插入,根據(jù)次數(shù)插入到表中多條記錄
CREATE PROCEDURE pro_op (IN intimes INT)
BEGIN
insertBoys :
WHILE
intimes > 0 DO
INSERT INTO boys (boyName, userCP)
VALUES
('沈千楓', 120) ;
SELECT intimes - 1 INTO intimes ;
END WHILE insertBoys ;
END $
批量插入阵幸,根據(jù)次數(shù)插入到表中多條記錄花履,如果次數(shù)大于20則停止
CREATE PROCEDURE pro_lk (IN intimes INT)
BEGIN
DECLARE i INT DEFAULT 1;
insertBoys :
WHILE
i <= intimes DO
INSERT INTO boys (boyName, userCP)
VALUES
('藍(lán)湛', 1200) ;
IF i>=20 THEN LEAVE insertBoys ;
END IF ;
SELECT i + 1 INTO i ;
END WHILE insertBoys ;
END $
批量插入,根據(jù)次數(shù)插入到表中多條記錄挚赊,偶數(shù)的數(shù)值不插入
CREATE PROCEDURE pro_lk (IN intimes INT)
BEGIN
DECLARE i INT DEFAULT 0;
insertBoys :
WHILE
i <= intimes DO
SELECT i + 1 INTO i ;
IF i%2=0 THEN ITERATE insertBoys ;
END IF ;
INSERT INTO boys (boyName, userCP)
VALUES
('沈蘭舟', 1200 + i) ;
END WHILE insertBoys ;
END $