需求:

1.在项目开发过程中有一些业务单据我们希望有一个单号,如采购单、请假单等等。

2.由于上述每个业务单据都在不同的表里,并且由于项目开发不规范(字段命名不统一,有的把单号叫做Code,有的叫做Number),还有我们希望在销售单单号生成的是SA+日期+流水号,发货单又是S0+日期+流水号。

要求:

写一个通用方法(存储过程)以适应上述要求

Mysql思路

1.要实现这种情况一定要使用预处理指令

2.使用预处理指令  一定只能用存储过程,而不能用自定义函数(它不支持预处理指令)

3.输入内容为 :表名、字段、头部标识

代码

CREATE DEFINER=`root`@`%` PROCEDURE `GetOrderNum`(Table_name VARCHAR(20),Filed_name VARCHAR(20),orderNamePre varchar(10))
BEGINDECLARE currentDate VARCHAR (15) ;  -- 日期DECLARE maxNo INT DEFAULT 0 ; -- 最大单号DECLARE num INT DEFAULT 8 ; DECLARE padstrlength int DEFAULT 3; -- 长度declare prelength INT ; -- 头部标识SET prelength = LENGTH(orderNamePre);SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 预处理指令的使用-- 使用max优化set @optsql = CONCAT('SELECT IFNULL(MAX(RIGHT(',filed_name,',',padstrlength,' )), \'0\' ) into @maxNo',' from ', table_name,' WHERE' ,' SUBSTRING(',filed_name,',', prelength  +  1,',',num,') = \'',currentDate,'\'',' AND SUBSTRING(',filed_name,',1',',',prelength,') = \'',orderNamePre,'\'');prepare stmt from @optsql;execute stmt;deallocate prepare stmt;set maxNo = @maxNo;SELECT CONCAT(orderNamePre,currentDate,LPAD((maxNo + 1),padstrlength,'0')) as neworderno;END

运行效果

Mysql 利用存储过程 实现单据号码(单号)生成器(万能版)相关推荐

  1. MySQL利用存储过程清除所有表中的所有记录

    MySQL利用存储过程清除所有表中的所有记录 在使用MySQL过程中,难免会出现一些测试数据,然而这些测试数据在真正部署运行的时候,通常要被清楚掉,并且自增长的字段要回复初始值.如何高效快速的实现以上 ...

  2. MySQL利用存储过程自动生成千万条数据

    文章目录 ​前言 ​一.实现思路 ​二.实现步骤 ​1.创建数据库 ​2.创建存储表和内存表 ​3.创建所需函数 ​4.创建存储过程 ​5.调用存储过程插入数据 ​6.统计数据库 ​ 拓展 ​总结 前 ...

  3. mysql利用存储过程删除数据库历史的过期数据

    最近遇到老板一个任务,要求我删除我们生产数据库产生的流水表的历史的数据,总共大约有2千万条数据.由于流水表正在使用,如果直接删除2千万条这么多的数据会造成卡死,甚至锁表,影响业务.我也考虑过新建一个表 ...

  4. mysql利用存储过程批量插入数据

    -- 如果存在此存储过程则删掉 DROP PROCEDURE IF EXISTS proc_initData; -- 定好结束符为"$" DELIMITER $ -- 创建 CRE ...

  5. mysql利用存储过程批量插入一千万数据(半小时)

    示例: 向user表中插入一千万条数据,其中user_id11位手机号随机,可以重复:age为18-27之间:count随机金额,八位小数:status二百万数据为1,八百万数据为0. -- 如果该名 ...

  6. mysql生成唯一订单号_用mysql的存储过程实现生成唯一订单号

    DELIMITER $$ USE `roamerbuddy`$$ DROP PROCEDURE IF EXISTS `generate_orderNo`$$ CREATE DEFINER=`root` ...

  7. MySQL利用存储过程新增字段

    DROP PROCEDURE IF EXISTS '存储过程名称'; DELIMITER //-- 功 能: XXXX-- 作 者: XXX-- 脚本类型: 手工整理-- 生成时间: 2021-12- ...

  8. mysql 存储过程 脚本_mysql利用存储过程插入大量数据脚本

    1.检查是否开启二进制日志 #查看是否开启二进制日志,ON表示开启,OFF表示没有开启 show variables like'log_bin_trust_function_creators'; #若 ...

  9. 高可用高性能可扩展的单号生成方案

    作者:赵玉开,十年以上互联网研发经验,2013年加入京东,在运营研发部任架构师,期间先后主持了物流系统自动化运维平台.青龙数据监控系统和物流开放平台的研发工作,具有丰富的物流系统业务和架构经验.在此之 ...

最新文章

  1. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
  2. Nature:乙酸盐通过介导微生物-脑-β细胞轴促进代谢综合征
  3. 阿里云服务器重启出现An error occurred 如何处理
  4. asp.net core监控—引入Prometheus(四)
  5. 最近一周交易所钱包比特币数量减少18425枚
  6. 吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架
  7. 【雷达通信】基于matlab SVM识别雷达数据【含Matlab源码 305期】
  8. VMware虚拟机端口映射(NAT设置)
  9. Matlab非线性拟合函数——nlinfit
  10. SCSI代码分析(5)SCSI驱动编程模式
  11. ios8正式版固件开放下载 有哪些亮点?
  12. 考虑实时安全优化的自学习自适应交通信号控制
  13. ps背景不变换字_ps里怎么在不改变背景的前提改变文字
  14. 大规模行人检索—PRCV2020竞赛发布
  15. Andriod微信小程序自动化测试
  16. druid监控无法关闭(坑),及处理方式
  17. CS115 - Computer Simulation, Assignment
  18. 光纤受激拉曼散射matlab程序,一种抑制光纤激光器中受激拉曼散射现象的方法与流程...
  19. Linux 自动结束进程并启动进程方法
  20. java正则表达式 字符串取开头数字 结尾数字 取反

热门文章

  1. 电流检测电路公式推导
  2. 关于UVM中的Sequence(一)
  3. python毕业设计作品基于django框架的鲜花水果商城毕设成品(3)后台管理功能
  4. 【独家】防不胜防!默认勾选复燃,看刚上市的「同程艺龙」作恶勇气和相悖价值观 || 新芒X...
  5. 初始化之前使寄存器恢复缺省值的重要性
  6. 嵌入式学习之STM32实现OLED
  7. Go语言中间件框架 Negroni 的静态文件处理源码分析
  8. [Leetcode 每日精选](本周主题-股票) 714. 买卖股票的最佳时机含手续费
  9. elasticsearch服务器CPU 占用过高 调整
  10. 2018第七届CodeVita国际编程大赛