簡體   English   中英

循環進入MySql存儲過程錯誤代碼1064

[英]Loop in a MySql stored procedure error code 1064

我是剛開始編寫MySQL存儲過程的新手,並且我正在嘗試使用循環和變量來解決問題。

我有一個表,該表的列名為STAT_NAME,其中該行的幾行可能具有相同的值。 我想創建一個臨時列,該列對每個STAT_NAME值的出現進行編號,例如,第一次STAT_NAME是“ stat A”,將STAT_COUNT設置為1,第二次是2,依此類推。然后再次從1開始“ stat B”並以此類推。

我已經創建了一個臨時表,其中包含一個名為STAT_COUNT的空列,並按STAT_NAME對表進行了排序。

然后,我嘗試遍歷所有行並相應地設置STAT_COUNT。 但是,出現以下錯誤:

錯誤代碼:1064。 請檢查與您的MySQL服務器版本相對應的手冊,以獲取在'@ counting,1附近使用的正確語法。然后SET @STAT_NAME_CURR =(從tmp1 LIMIT @中選擇@STAT_NAME

有誰能解釋為什么我寫的東西不好? 我認為如果我使用系統變量而不是@counting會很好,但我不明白為什么。 我已經嘗試使用Google搜索問題,但沒有解決任何問題!

干杯。

DROP PROCEDURE IF EXISTS collate_stats;
delimiter //
CREATE PROCEDURE collate_stats()
begin

create temporary table tmp1 engine=memory 
SELECT STAT_NAME, STAT, '' AS STAT_COUNT
FROM performance_testing_stats.20131014
ORDER BY STAT_NAME;

-- stat name that we are currently looking at
SET @STAT_NAME_CURR := "";
-- number of times this name has been found so far
SET @STAT_NAME_COUNT := 0;

-- Use to loop through all rows
SET @n := (SELECT COUNT(*) FROM tmp1);

-- Row reached so far
SET @counting := 0;
WHILE @counting < @n DO

    -- IF @STAT_NAME_CURR is not equal to the STAT_NAME for the current row,
    -- THEN set @STAT_NAME_CURR to STAT_NAME value and reset @STAT_NAME_COUNT
    -- ELSE just increment @STAT_NAME_COUNT
     IF @STAT_NAME_CURR <> (SELECT @STAT_NAME FROM tmp1 LIMIT @counting,1) THEN
        SET @STAT_NAME_CURR = (SELECT @STAT_NAME FROM tmp1 LIMIT @counting,1);
        SET @STAT_NAME_COUNT = 0;
    ELSE
        SET @STAT_NAME_COUNT = @STAT_NAME_COUNT + 1;
    END IF;

    -- Set STAT_COUNT for current row to value of @STAT_NAME_COUNT
    UPDATE tmp1 SET STAT_COUNT = @STAT_NAME_COUNT WHERE STAT_NAME = @STAT_NAME_CURR AND STAT_COUNT = '' LIMIT 1;

    -- Move to next row
    SET @counting = @counting + 1;
END WHILE;

select * from tmp1;

END //

delimiter ;

您可能想研究使用游標而不是while循環。

但是,您可能可以通過一個簡單的GROUP BY查詢來完成您想做的事情:

SELECT STAT_NAME, STAT, COUNT(1) as STAT_COUNT
FROM performance_testing_stats.20131014
GROUP BY STAT_NAME, STAT
ORDER BY STAT_NAME, STAT;

除非我對您的工作有所遺漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM