mysql存储过程--重复编号重新赋值


DROP PROCEDURE if EXISTS updateAssetNum;

CREATE PROCEDURE updateAssetNum() 
BEGIN
    DECLARE row_count INT DEFAULT 0;
    DECLARE cur_count int DEFAULT 0;
    DECLARE idStr VARCHAR(256) DEFAULT 'aaa';
    DECLARE idCount INT DEFAULT 0;
    DECLARE idCurCount INT DEFAULT 1;
    DECLARE curId VARCHAR(64) DEFAULT '';
    
    SELECT count(1) coun INTO row_count FROM (SELECT asset_num, GROUP_CONCAT(id) ids,count(asset_num) coun FROM as_asset GROUP BY asset_num) t WHERE t.coun > 1;
    
    SET cur_count = 0;
    WHILE cur_count < row_count DO
        SET idStr = '';
        SELECT ids INTO idStr FROM (SELECT asset_num, GROUP_CONCAT(id) ids,count(asset_num) coun FROM as_asset GROUP BY asset_num) t WHERE t.coun > 1 LIMIT 0,1;
        
        SET cur_count = cur_count + 1;
        IF(IFNULL(LENGTH(idStr),0) > 0) THEN 
            SET idCount = 0;
            SET idCurCount = 1;
            SELECT LENGTH(idStr) - LENGTH(REPLACE(idStr, ',', '')) + 1 INTO idCount;
            WHILE idCurCount <= idCount DO
                set curId = '';
                SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(idStr, ',', idCurCount) , ',' , -1 ) INTO curId;
                IF(LENGTH(curId) > 0) THEN
                    UPDATE as_asset SET asset_num = CONCAT(asset_num,'-',idCurCount) WHERE id = curId;
                    UPDATE as_asset SET manufacturing_num = asset_num,asset_qrcode = asset_num WHERE id = curId;
                END IF;
                SET idCurCount = idCurCount + 1;
            END WHILE;
        END IF;
    END WHILE;
END;


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容