单据编号自动生成-SQL方案

单据编号生成SQL

 

不同时间段的几个项目都有单据编号的需求,如果底层用的数据存储,则此方案的集成及使用非常方便,特意整理并分享出来。

创建编号定义表 ticket_type

DROP TABLE IF EXISTS `ticket_type`;

CREATE TABLE `ticket_type` (

  `TT_CODE` varchar(8) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型编号',

  `TT_NAME` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型名称',

  `SHORT_CODE` varchar(5) COLLATE utf8mb4_bin DEFAULT NULL,

  `DATE_FORMAT` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,

  `FLOW_NO` int(11) DEFAULT NULL,

  `FLOW_NO_LEN` int(255) DEFAULT NULL,

  PRIMARY KEY (`TT_CODE`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='票据类型';

 

 

测试数据

TT_CODE

TT_NAME

SHORT_CODE

DATE_FORMAT

FLOW_NO

FLOW_NO_LEN

01

生产入库单

RK

%Y%m%d

1

3

02

销售出库单

XX

%Y%m%d

1

3

03

退货入库单

TR

%Y%m%d

1

3

 

 

创建存储过程:

 

DROP FUNCTION  IF EXISTS GetBillNo;


CREATE FUNCTION GetBillNo (ticketCode varchar(8))

 RETURNS varchar(50)

BEGIN

       UPDATE ticket_type set FLOW_NO = FLOW_NO + 1 where TT_CODE = ticketCode;

       return  (select concat(short_code, date_format(now(),`DATE_FORMAT`) , LPAD( right( concat('0000000000000000000000',cast(FLOW_NO as char)),FLOW_NO_LEN),FLOW_NO_LEN,'0')) from ticket_type where tt_code = ticketCode) ; 

END;

 

 

使用方法

 

select GetBillNo('01')

 

 

验证结果

 

 

posted @ 2022-12-14 16:24  moonwebmast  阅读(218)  评论(0编辑  收藏  举报