數據庫-控制語句

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語句

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章