myql存储过程生成订单号

来源:互联网 发布:java如何创建对象数组 编辑:程序博客网 时间:2024/05/24 01:06

DELIMITER $$USE `roamerbuddy`$$DROP PROCEDURE IF EXISTS `GENERATE_ORDERNO`$$CREATE DEFINER=`root`@`%` PROCEDURE `generate_orderNo`(IN orderNamePre CHAR(2), IN num INT, OUT newOrderNo VARCHAR(25))BEGIN      DECLARE currentDate VARCHAR (15) ;-- 当前日期,有可能包含时分秒       DECLARE maxNo INT DEFAULT 0 ; -- 离现在最近的满足条件的订单编号的流水号最后5位,如:SH2013011000002的maxNo=2     --  DECLARE l_orderNo varCHAR (25) ;-- 新生成的订单编号     --  DECLARE oldDate DATE ;-- 离现在最近的满足条件的订单编号的日期       DECLARE oldOrderNo VARCHAR (25) DEFAULT '' ;-- 离现在最近的满足条件的订单编号             IF num = 8 THEN -- 根据年月日生成订单编号         SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 订单编号形式:前缀+年月日+流水号,如:SH2013011000002       ELSEIF num = 14 THEN -- 根据年月日时分秒生成订单编号         SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') INTO currentDate ; -- 订单编号形式:前缀+年月日时分秒+流水号,如:SH2013011010050700001,个人不推荐使用这种方法生成流水号       ELSE -- 根据年月日时分生成订单编号         SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i') INTO currentDate ;-- 订单形式:前缀+年月日时分+流水号,如:SH20130110100900005       END IF ;            SELECT IFNULL(BANKORDER, '') INTO oldOrderNo       FROM rc_bank_details       WHERE SUBSTRING(BANKORDER, 2, num) = currentDate  --验证当天的时间   ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条             IF oldOrderNo != '' THEN         SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -6), DECIMAL) ;-- SUBSTRING(oldOrderNo, -6):订单编号如果不为‘‘截取订单的最后6位       END IF ;      SELECT         CONCAT(orderNamePre, currentDate,  LPAD((maxNo + 1), 6, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 6, '0'):如果不足6位,将用0填充左边           -- INSERT INTO test_orders (orderNo, orderName) VALUES (newOrderNo, 'testNo') ; -- 向订单表中插入数据     --    set newOrderNo = l_orderNo;       SELECT         newOrderNo ;   END$$DELIMITER ;

CALL `generate_orderNo`('S', 8, @orderNo);  




1 0
原创粉丝点击