While循环中的MYSQL存储过程变量

时间:2015-01-15 14:10:04

标签: mysql stored-procedures

好的,这可能非常简单,但我似乎无法找到答案。 我目前正在尝试清理一些使用一堆select语句的storeod程序,这些语句的变量只会增加数量,例如。 id1,id2,id3,id4,id5,id6,id7和id8。我想将存储过程简化为几行,而不是连续调用24个语句。

现在请原谅我,如果语法是关闭的,不是MySQL程序员的交易。

在我的普通语言中,我会使用变量和附加的控件执行while循环,例如。

while x <= count do

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

 SET x = x + 1;


end;

将控件附加到变量末尾的正确方法是什么?这在存储过程中是否可行? Select语句比显示的语句多一点,但如果我能做一个简单的语句,它将适用于语句的其余部分。

当前使用的代码,这只是代码的一部分。我只是用3个不同的select语句发布一个。目前使用3种不同的基本选择语句。如果我能以某种方式将所有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;

1 个答案:

答案 0 :(得分: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字符串中并使用USING传递X - 请参阅此处:sql-syntax-prepared-statements