• mySQL生成用户编码


    系统中经常有一些编码需要生成,以下是生成编码的设计。

    下面OPC,DB,EB生成编码的时候要求不带4。

    通过调用函数的方式如:SELECT f_getmaxid(1)就可以得到对应的编码。

    表设计:

    CREATE TABLE `t_sys_maxid` (
      `tagid` int(8) NOT NULL COMMENT '识别号',
      `maxno` int(11) NOT NULL COMMENT '最大号',
      `idlen` tinyint(4) NOT NULL COMMENT '最大号',
      `idpre` varchar(4) NOT NULL COMMENT '前缀',
      `isid` char(1) NOT NULL COMMENT '是否是字符ID',
      PRIMARY KEY (`tagid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    

    调用函数:

    DELIMITER $$
    
    USE `weipansettlementdb0420`$$
    
    DROP FUNCTION IF EXISTS `f_getmaxid`$$
    
    CREATE DEFINER=`weipan_jy`@`%` FUNCTION `f_getmaxid`(p_tagid TINYINT) RETURNS VARCHAR(10) CHARSET utf8
        MODIFIES SQL DATA
    BEGIN
      DECLARE v_idlen TINYINT; 	#总长度
      DECLARE v_isid CHAR(1); 	#是否是ID
      DECLARE v_i INT DEFAULT 1; 	#循环变量
      DECLARE v_j INT DEFAULT 1; 	#循环变量
      DECLARE v_num INT DEFAULT 1;	#排除4的变量
      DECLARE v_numlen INT;		#排除4变量的长度
      DECLARE v_index INT;		#4出现的位置
      DECLARE v_zerocnt INT; 	#加零数量
      DECLARE v_id VARCHAR(10); 	#返回的ID;
      DECLARE v_idpre VARCHAR(4);	#前缀
      
      UPDATE t_sys_maxid SET maxno=1+@mno:=maxno,isid=@isid:=isid 
      WHERE tagid=p_tagid;
      
      SELECT idpre INTO v_idpre
      FROM t_sys_maxid WHERE tagid=p_tagid;
      
      IF (v_idpre='OPC' OR v_idpre='DB' OR v_idpre='EB') THEN
        SET v_numlen=LENGTH(CONVERT(@mno+1,CHAR(10))); 
        SET v_index=LOCATE('4', CONVERT(@mno+1,CHAR(10))); 
      
        IF v_index > 0 THEN
          SET v_index=v_numlen-v_index;
          IF v_index > 0 THEN
            WHILE v_j<=v_index DO
    	  SET v_num=v_num*10;
    	  SET v_j=v_j+1;
            END WHILE;
          END IF;
          UPDATE t_sys_maxid SET maxno=maxno+v_num
          WHERE tagid=p_tagid;
        END IF;
      END IF;
      
      IF @isid='Y' THEN
      
        SELECT idpre,idlen,isid INTO v_id,v_idlen,v_isid
        FROM t_sys_maxid
        WHERE tagid=p_tagid;
      
        SET v_zerocnt=v_idlen-LENGTH(CONCAT(CONVERT(@mno,CHAR(10)),v_id));
      
        WHILE v_i<=v_zerocnt DO
          SET v_id=CONCAT(v_id,'0');
          SET v_i=v_i+1;
        END WHILE;
      
        SET v_id=CONCAT(v_id,TRIM(CONVERT(@mno,CHAR(10))));
      ELSE
        SET v_id=TRIM(CONVERT(@mno,CHAR(10)));
      END IF;
      
      RETURN v_id;
    END$$
    
    DELIMITER ;
  • 相关阅读:
    求算个十百输出
    求算反弹高度
    九九乘法表
    等腰三角形字母
    动态数码管
    静态数码管
    出错的程序操作
    EPLAN
    robotstudio smart组件解释
    eclipse插件安装方法
  • 原文地址:https://www.cnblogs.com/CarlBlogs/p/7405424.html
Copyright © 2020-2023  润新知