使用Navicat 创建mysql存储过程,实现日期加流水号序列
Posted 飞龙在生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Navicat 创建mysql存储过程,实现日期加流水号序列相关的知识,希望对你有一定的参考价值。
目的:使用Navicat 创建mysql存储过程,实现格式为8位日期(年月日)+5位流水号序列。
步骤:
1、打开Navicat 登录数据库,点击导航栏上的函数,如下图:
2、点击新建函数,选择“过程”,如下图:
3、添加输出参数,如下图:
4、存储过程代码如下:
BEGIN DECLARE currentDate CHAR (13) ;-- 定义currentDate为当前日期,格式为:年+月+日 DECLARE maxNo INT DEFAULT 0 ; -- 定义maxNo为离现在最近的满足条件的订单编号的流水号最后5位,如:2018042600002的maxNo=2 DECLARE oldOrderNo CHAR (13) DEFAULT \'\' ;-- 定义oldOrderNo为离现在最近的订单编号,默认为空 DECLARE newOrderNo CHAR (13) DEFAULT \'\' ;-- 定义newOrderNo为新生成的订单编号,默认为空 SELECT DATE_FORMAT(NOW(), \'%Y%m%d\') INTO currentDate ;-- 当前日期 订单编号形式:年月日+流水号,如:2018042600002 /* 从test_orders表中查出最新一条记录赋值给oldOrderNo */ SELECT IFNULL(orderNo, \'\') INTO oldOrderNo -- IFNULL(expr1,expr2),接收两个参数,如果不是NULL,则返回第一个,如果是NULL,返回第二个 FROM test_orders WHERE SUBSTRING(orderNo, 1, 8) = currentDate ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条 IF oldOrderNo != \'\' THEN SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位 END IF ; SELECT CONCAT(currentDate, LPAD((maxNo + 1), 5, \'0\')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, \'0\'):如果不足5位,将用0填充左边 SELECT newOrderNo; END
5、修改参数数据类型长度,默认没有,可能会报错,这里固定为8位日期+5位流水号,
6、保存存储过程名,orderNo,
7、新建测试数据库,test_orders,添加数据,目前我的表里面最新的orderNo数据为‘201811600005’,
8、调用存储过程,如下图:
以上是关于使用Navicat 创建mysql存储过程,实现日期加流水号序列的主要内容,如果未能解决你的问题,请参考以下文章
MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别
navicat for MySQL中的 查询编辑器中如何执行存储过程?