自動分組+合並完整的sql腳本


BEGIN
#前提:指定字符串長度為8字符定長
#邏輯:循環8次,比對2個字符串相同索引位置下的數值大小,並取結果最大值。
#示例:merge1(輸入參數source1,輸入參數source2,輸出結果result)
#注意:輸入參數必須是8位字符串
    set @cindex=1;
    set result='';
    WHILE @cindex<9 DO
        set @temp1=SUBSTR(source1,@cindex,1)+0;
        set @temp2=SUBSTRING(source2,@cindex,1)+0;
        IF @temp1>@temp2 THEN
            set result=CONCAT(result,@temp1);
            set @cindex=@cindex+1;
        ELSEIF @temp1=@temp2 THEN
            set result=CONCAT(result,@temp1);
            set @cindex=@cindex+1;
        ELSEIF @temp1<@temp2 THEN
            set result=CONCAT(result,@temp2);
            set @cindex=@cindex+1;
        END IF;
    END WHILE;
END

這個過程是用來 合並 2個 8為varchar類型字符串的

參數 見截圖
BEGIN
DECLARE hasDone INT DEFAULT FALSE;
DECLARE missionIDValue VARCHAR(8);
DECLARE missionIDdata VARCHAR(8);
DECLARE groupNameCur CURSOR FOR SELECT missionID from a where a.groupName=groupNames;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET hasDone = TRUE;
set missionIDValue='00000000';
set missionIDdata='00000000';
OPEN groupNameCur;
  read_loop: LOOP
    FETCH groupNameCur INTO missionIDdata;
    IF hasDone THEN
      LEAVE read_loop;
    END IF;
        call merge1(missionIDValue,missionIDdata,missionIDValue);
        SELECT missionIDdata,missionIDValue;
  END LOOP;
CLOSE groupNameCur;
SELECT groupNames;
UPDATE a set other=missionIDValue where a.groupName=groupNames;
END

這個函數是用來  把分組數據進行逐條合並的。它需要一個 分組名稱
然后根據分組名稱去循環調用 merge1 函數,並把最終結果更新到同組數據的 other 列中


BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE groupNameValue VARCHAR(8);
    DECLARE groupNameCur CURSOR FOR SELECT DISTINCT groupName from a;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN groupNameCur;
  read_loop: LOOP
    FETCH groupNameCur INTO groupNameValue;
    IF done THEN
      LEAVE read_loop;
    END IF;
    CALL autoMergeGroup(groupNameValue);
  END LOOP;
    CLOSE groupNameCur;    
END
這個是自動化合並的入口函數。它負責對數據進行分組,並循環調用 autoMergeGroup 過程,就是上面的存儲過程。

程序在執行時,只需要調用這個存儲過程就可以了,就能做到:先把數據分組,再循環每組執行。在每組執行中,循環查詢每條數據,把當前條和參考值'00000000'最合並操作
 
這是a表執行結果截圖
varchar類型,必須提供長度,否則  就無法檢驗到底問題出在那里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM