1. 程式人生 > >使用Navicat 建立mysql儲存過程,實現日期加流水號序列

使用Navicat 建立mysql儲存過程,實現日期加流水號序列

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目的:使用Navicat 建立mysql儲存過程,實現格式為8位日期(年月日)+5位流水號序列。

步驟:

1、開啟Navicat 登入資料庫,點選導航欄上的函式,如下圖:

2、點選新建函式,選擇“過程”,如下圖:

 

3、新增輸出引數,如下圖:

 

4、儲存過程程式碼如下:

BEGIN    
  DECLARE currentDate CHAR (13) ;-- 定義currentDate為當前日期,格式為:年+月+日
  DECLARE maxNo INT DEFAULT 0 ; -- 定義maxNo為離現在最近的滿足條件的訂單編號的流水號最後5位,如:2018042600002的maxNo=2      
  DECLARE oldOrderNo CHAR (13) DEFAULT '' ;-- 定義oldOrderNo為離現在最近的訂單編號,預設為空     
  DECLARE newOrderNo CHAR (13) DEFAULT '' ;-- 定義newOrderNo為新生成的訂單編號,預設為空
 
  SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 當前日期  訂單編號形式:年月日+流水號,如:2018042600002     
    
  /* 從test_orders表中查出最新一條記錄賦值給oldOrderNo */    
  SELECT IFNULL(orderNo, '') INTO oldOrderNo  -- IFNULL(expr1,expr2),接收兩個引數,如果不是NULL,則返回第一個,如果是NULL,返回第二個
  FROM test_orders     
  WHERE SUBSTRING(orderNo, 1, 8) = currentDate       
  ORDER BY id DESC LIMIT 1 ; -- 有多條時只顯示離現在最近的一條     
      
  IF oldOrderNo != '' THEN     
    SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):訂單編號如果不為‘‘擷取訂單的最後5位     
  END IF ;    
  SELECT     
    CONCAT(currentDate,  LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, '0'):如果不足5位,將用0填充左邊     
      
  SELECT newOrderNo;
  
END

5、修改引數資料型別長度,預設沒有,可能會報錯,這裡固定為8位日期+5位流水號,

6、儲存儲存過程名,orderNo,

7、新建測試資料庫,test_orders,新增資料,目前我的表裡面最新的orderNo資料為‘201811600005’,

 

8、呼叫儲存過程,如下圖: