MySQL使用過程存儲生成唯一訂單號


數據庫表:

/*
Navicat MySQL Data Transfer

Source Server         : local
Source Server Version : 50640
Source Host           : localhost:3306
Source Database       : springsecurity

Target Server Type    : MYSQL
Target Server Version : 50640
File Encoding         : 65001

Date: 2018-08-25 22:10:57
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `orderNo` varchar(30) NOT NULL COMMENT '訂單號',
  `productTypes` varchar(11) NOT NULL COMMENT '商品類型',
  `orderNumber` int(11) DEFAULT NULL COMMENT '商品數量',
  `unitPrice` decimal(10,2) unsigned zerofill DEFAULT NULL COMMENT '單價',
  `totalPrice` decimal(10,2) unsigned zerofill DEFAULT NULL COMMENT '總價',
  PRIMARY KEY (`orderNo`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

 

創建過程存儲:

 

CREATE PROCEDURE `generate`(in orderNamePre char(2),in productTypes VARCHAR(20),
in orderNumber INT(10),in unitPrice decimal(10,2))  
-- 輸入當前訂單名以及時間長度,輸出訂單號
BEGIN  
  DECLARE newOrderNo varchar(25);
  DECLARE currentDate varCHAR (15) ;-- 當前日期,有可能包含時分秒   
  DECLARE maxNo INT DEFAULT 0 ; -- 離現在最近的滿足條件的訂單編號的流水號最后5位,如:SH2013011000002的maxNo=2    
  DECLARE oldOrderNo VARCHAR (25) DEFAULT '' ;-- 離現在最近的滿足條件的訂單編號   
    
--   SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') INTO currentDate ;-- 年月日時分秒共14位數
    SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i') INTO currentDate ;-- 年月日時分秒共14位數
    
        -- SUBSTRING() 字符串截取函數
  SELECT IFNULL(orderNo, '') INTO oldOrderNo   
  FROM orders
  WHERE SUBSTRING(orderNo, 3, 12) = currentDate   -- 截取時間段
    AND SUBSTRING(orderNo, 1, 2) = orderNamePre    -- 截取當前訂單名
  ORDER BY orderNo DESC LIMIT 1 ; -- 有多條時只顯示離現在最近的一條   
    
    -- 判斷是否擁有當前時間段訂單
  IF oldOrderNo != '' THEN   
    SET maxNo = SUBSTRING(oldOrderNo, -5);
  END IF ;  
    
  SELECT CONCAT(orderNamePre, currentDate,  LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ;
        -- LPAD((maxNo + 1), 5, '0'):如果不足5位,將用0填充左邊   
  INSERT INTO orders (orderNo,productTypes,orderNumber,unitPrice,totalPrice) VALUES (newOrderNo,productTypes,orderNumber,unitPrice,FORMAT(orderNumber*unitPrice,2)) ; -- 向訂單表中插入數據   
END

 

調用過程存儲:

CALL generate("TT","休閑褲",2,198.60)

最后成功往表中插入數據:

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com