zoukankan      html  css  js  c++  java
  • 使用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、调用存储过程,如下图:

  • 相关阅读:
    ORA-00119: invalid specification for system parameter REMOTE_LISTENER
    Standby Redo Log 的设定原则、创建、删除、查看、归档位置
    dataguard类型转换与模式转化
    Restore Points 制定回退方案
    11g dataguard 类型、保护模式、服务
    [置顶] 设计模式系列4-抽象工厂模式
    MediaInfo源代码分析 4:Inform()函数
    Codeforces Beta Round #51 D. Beautiful numbers
    如何将ER图转换成关系模式集
    建立简单的服务器端程序
  • 原文地址:https://www.cnblogs.com/flzs/p/9973122.html
Copyright © 2011-2022 走看看