调用
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='订单编号前缀表';