2015-01-15 166 views
1

好吧,這可能是超級簡單,但我似乎無法找到答案。 我目前正在嘗試清理一些存儲過程,這些存儲過程使用一堆只有數量增加的變量的select語句,例如。 id1,id2,id3,id4,id5,id6,id7和id8。我不想連續調用24條語句,而是想將存儲過程減少到幾行。MYSQL存儲過程變量while循環

現在請原諒,如果語法是關閉的,而不是貿易的MySQL程序員。

在我的正常語言,我會做一個while循環與變量和控制附加如。

while x <= count do 

select * from table where col = id[x]; 

SET x = x + 1; 


end; 

將控件附加到變量末尾的正確方法是什麼?這在存儲過程中是可能的嗎?選擇語句比所示的要多一點,但如果我可以做一個簡單的語句,它可以用於語句的其餘部分。

當前使用的代碼,這只是代碼的一部分。我只是發佈一個與3不同的選擇語句。目前使用3種不同的基本select into語句。如果我能以某種方式將所有3合併成1個語句,那將是驚人的,但是我對MySQL更新,也許給了更多時間? if (licount <=2) then /* 2 Stations */ select gen_idx into gen_idx1 from j_final_results where line=pline and station=1 and type_result=1 order by ID desc limit 1; select gen_idx into gen_idx2 from j_final_results where line=pline and station=2 and type_result=1 order by ID desc limit 1; set gen_idx3=0; set gen_idx4=0; set gen_idx5=0; set gen_idx6=0; set gen_idx7=0; set gen_idx8=0; select scan_lbl into serial1 from j_final_results where line=pline and station=1 and type_result=1 order by ID desc limit 1; select scan_lbl into serial2 from j_final_results where line=pline and station=2 and type_result=1 order by ID desc limit 1; set serial3=''; set serial4=''; set serial5=''; set serial6=''; set serial7=''; set serial8=''; select type_result into type1 from j_final_results where line=pline and station=1 order by ID desc limit 1; select type_result into type2 from j_final_results where line=pline and station=2 order by ID desc limit 1; set type3=0; set type4=0; set type5=0; set type6=0; set type7=0; set type8=0;

+0

您可以在過程中做類似的事情,最新的問題是什麼? – Mihai

+0

我只是想ot找出做id [x]的正確方法?如果那是真的。 – Ralre

+0

如果你可以發佈你的長SP,這將有所幫助。 – Pentium10

回答

1

你需要做一些動態代碼生成,我的首選方法將是這個樣子:

WHILE X <= COUNT DO 


    SET @sql = CONCAT('select * from table where col = id',X); 
    PREPARE runme FROM @sql; 
    EXECUTE runme; 
    DEALLOCATE PREPARE runme; 

    SET X = X + 1; 


END; 

你也可以把一個?在@sql字符串中,並通過X使用USING - 請參見:sql-syntax-prepared-statements

+0

我認爲這將符合我的需求,但我有一個問題。我有一些可以傳入過程的變量。我也需要在語句中使用該變量。變量在上面顯示爲'pline'。我如何在準備好的聲明中使用它?我還對id [x]部分有問題,因爲它一直說變量不存在。 – Ralre

+0

我相信我明白了。我很感謝幫助,這很好! – Ralre

+0

很高興解決,對不起,我沒有早點回來,不得不離線。 – Giles