1、控制語句的概念和函數模板代碼
控制語句的概念
- 控制語句
用來實現對程序流程的選擇、循環、轉向和返回等進行控制(IF、CASE、LOOP、WHILE、LEAVE、ITERATE、REPEAT)
- 分類
選擇語句
循環語句
轉向語句
返回語句
--創建函數
delimiter //
DROP FUNCTION IF EXISTS fun_name;
CREATE FUNCTION fun_name()
RETURNS VARCHAR(20)
BEGIN
RETURN 'Hello';
END //
delimiter;
--調用函數
SELECT fun_name();
2、IF分支控制語句
IF語句
- IF語句可以進行條件判斷,根據是否滿足條件,將執行不同的分支語句
- IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]
...
[ELSE statement_list]
END IF
search_condition參數表示條件判斷語句
statement_list參數表示不同條件的執行語句
eg:
1)創建函數
-- 1:IF
-- 傳入一個memberId,返回會員是否是土豪(>40000)、無產(<10000)、中產(10000<X<40000)
delimiter //
DROP FUNCTION IF EXISTS f_is_tuhao;
CREATE FUNCTION f_is_tuhao(memberId INT)
RETURNS VARCHAR(20)
BEGIN
-- 定義msg保存輸出信息
DECLARE _msg VARCHAR(20);
-- 定義一個局部變量保存查詢出來的該會員的餘額
DECLARE _amount DECIMAL(18,2);
-- 查詢出來的該會員的餘額,保存到局部變量_amount中
SELECT leaveAmount INTO _amount FROM member WHERE id=memberId;
-- 通過IF分支結構對局部變量_amount進行判斷
IF _amount<10000 THEN
SET _msg = '我是無產階級';
ELSEIF _amount>=10000 AND _amount<40000 THEN
SET _msg = '我是中產階級';
ELSE
SET _msg = '我是土豪';
END IF;
RETURN _msg;
END//
delimiter;
2)調用函數
select f_is_tuhao(1);
3、CASE語句
- 條件判斷語句,可以實現比IF語句更復雜的條件判斷
- 語法1:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]...
[ELSE statement_list]
END CASE
case_value參數表示條件判斷的變量
when_value參數表示變量的取值
statement_list參數表示不同when_value值的執行語句
eg:
1)創建函數:
-- 創建一個函數,傳入一個memberId,返回用戶的類型(1:普通 2:內部 其他)
delimiter //
DROP FUNCTION IF EXISTS f_get_member_type_msg;
CREATE FUNCTION f_get_member_type_msg(memberId INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE _msg VARCHAR(20);
DECLARE _type TINYINT;
SELECT type INTO _type FROM member WHERE id = memberId;
-- 判斷
CASE _type
WHEN 1 THEN SET _msg = '普通用戶';
WHEN 2 THEN SET _msg = '內部用戶';
ELSE SET _msg = '其他用戶';
END CASE;
RETURN _msg;
END //
delimiter;
2)調用函數:
SELECT f_get_member_type_msg(3);
- 語法2:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list]...
[ELSE statement_list]
END CASE
eg:
1)創建函數:
-- 1:CASE
-- 傳入一個memberId,返回會員是否是土豪(>40000)、無產(<10000)、中產(10000<X<40000)
delimiter //
DROP FUNCTION IF EXISTS f_is_tuhao_case;
CREATE FUNCTION f_is_tuhao_case(memberId INT)
RETURNS VARCHAR(20)
BEGIN
-- 定義msg保存輸出信息
DECLARE _msg VARCHAR(20);
-- 定義一個局部變量保存查詢出來的該會員的餘額
DECLARE _amount DECIMAL(18,2);
-- 查詢出來的該會員的餘額,保存到局部變量_amount中
SELECT leaveAmount INTO _amount FROM member WHERE id=memberId;
-- case的條件判斷、分支控制
CASE
WHEN _amount>=40000 THEN SET _msg='我是土豪';
WHEN _amount>=10000 AND _amount<=40000 THEN SET _msg='我是中產';
ELSE SET _msg='我是無產';
END CASE;
RETURN _msg;
END//
delimiter;
2)調用函數:
SELECT f_is_tuhao_case(4);
4、LOOP循環控制語句
- 循環控制結構
- 用來重複執行某段算法
- 減少代碼重複書寫工作量
- 三要素:
循環變量:相當於開始和結束循環的一個信號
循環體:循環處理的邏輯語句
循環終止條件:合適的時候結束循環
LOOP語句
- 循環語句
- 使用LOOP使特定的語句重複執行
- LOOP語句沒有停止循環的語句,使用LEAVE才能停止
- 語法:
- [begin_label:] LOOP
statement_list
END LOOP [end_label]
- begin_label
循環開始標誌,end_label是循環結束的標誌
兩個標誌必須相同,而且都可以省略
- statement_list
表示需要循環執行的語句
LEAVE語句