(mysql) 通过存储过程自动生成订单号

该博客介绍了如何在MySQL中创建一个存储过程,用于根据输入类型动态生成订单号。过程首先获取当前日期和前缀,然后判断日期是否变化,据此更新最大索引并保存最新的订单号。最后将结果返回给调用者。

调用 


call get_sto_seqnum('V',@a);
select @a;

 

参数:in P_CODE VARCHAR(12), out NEW_ORDER_ON VARCHAR(14)   (P_CODE  传入类型 )

类型:PROCEDURE

 

BEGIN
    DECLARE p_NewValue VARCHAR(20);
         DECLARE p_CurrentDate VARCHAR(8);
    DECLARE p_Prefix VARCHAR(5);
    DECLARE p_MaxIndex INTEGER;
        DECLARE p_MaxDate VARCHAR(8);
    DECLARE p_MaxValue INTEGER DEFAULT 0;
        DECLARE p_isOverflow INTEGER;
        DECLARE p_Count INTEGER DEFAULT 1;
        DECLARE s_no INTEGER DEFAULT 1;
        DECLARE t_error INTEGER DEFAULT 0;     
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1;
START TRANSACTION;
SELECT 
prefix,max_date,max_index
INTO p_Prefix,p_MaxDate,p_MaxIndex
FROM sto_sequence_number
 WHERE prefix=P_CODE limit 1 for UPDATE;

  set  p_MaxValue = p_MaxIndex;            
            set p_CurrentDate = substring(DATE_FORMAT(NOW(),'%Y%m%d'),3, LENGTH('yymmdd'));
                IF p_CurrentDate = p_MaxDate THEN             
               set p_MaxValue = p_MaxValue + p_Count; 
           ELSE
               set p_MaxValue = s_no;
                END IF;
         set p_MaxIndex = p_MaxValue;

        UPDATE sto_sequence_number SET max_date = p_CurrentDate, max_index=p_MaxIndex
        ,current_max_value= CONCAT_WS('',p_Prefix , p_CurrentDate  ,LPAD(p_MaxIndex, 6,'0'))
        WHERE prefix=P_CODE;        
        SELECT  current_max_value INTO NEW_ORDER_ON
        FROM sto_sequence_number
        WHERE  prefix=P_CODE LIMIT 1; 

        IF t_error = 1 THEN    
            ROLLBACK;    
        ELSE    
            COMMIT;    
    END IF;

END

 

自定义表

CREATE TABLE `sto_sequence_number` (
  `id` decimal(65,30) NOT NULL,
  `remark` varchar(255) DEFAULT NULL,
  `prefix` varchar(5) DEFAULT NULL,
  `max_date` varchar(8) DEFAULT NULL,
  `max_index` decimal(65,30) DEFAULT NULL,
  `current_max_value` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单编号前缀表';


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值