如何将我的 sql 更改为在 mysql 中的 MySql 存储过程中循环?

How to change my sql to loop in MySql stored procedure in mysql?

当我在每个语句中写下我的 sql 时,它起作用 well.Now 我的 sql 是:

 SELECT COUNT(*)  INTO v_Point1Num from tbpoint where  Point=1;
 SELECT COUNT(*)  INTO v_Point2Num from tbpoint  where Point=2;
 SELECT COUNT(*)  INTO v_Point3Num from tbpoint  where Point=3;
 SELECT COUNT(*)  INTO v_Point4Num  from tbpoint where Point=4;
 SELECT COUNT(*)  INTO v_Point5Num from tbpoint where Point=5;

而且效果很好。 现在我试着把它改成循环,但它是错误的,如何解决?我想知道这是为什么我没有像“@v”那样使用“@”的原因。

--can not work.
CREATE `SP_Point`()
BEGIN 
DECLARE v INT DEFAULT(0);
DECLARE pointlStr VARCHAR(800);
SET v = 1;  
WHILE v <= 5 DO 
SELECT COUNT(*)  INTO 
   (case v 
   when 1  then concat('v_Point',v,'Num')
     when 2  then concat('v_Point',v,'Num')
       when 3  then concat('v_Point',v,'Num')
         when 4  then concat('v_Point',v,'Num')
           when 5 then concat('v_Point',v,'Num')
           )
   from tbpoint  
   where  Point=v;  
    SET v = v + 1; 
 END WHILE; 
END

我试着改成其他方式,还是不对

  SET v = 1;  
  WHILE v <= 5 DO 
  set pointlStr=
  'SELECT COUNT(*)  INTO  @v_Point'+@v+'Num from tbpoint
 where  Point='+@v;  
 prepare stmt from @pointlStr;
 execute stmt;
    SET v = v + 1; 
END WHILE; 

您正在尝试在 运行 时间创建一个新变量(v_Point1Num、v_Point2Num...等),这在 mysql 中是不可能的。你必须在使用它之前声明一个变量。

您也可以通过 运行 宁单个查询获得相同的输出......而不是 运行宁多个查询

SELECT Point, COUNT(*)  from tbpoint 
group by Point
having point > 0 and point <= 5;

Concat() 函数 return varchar/String 不是变量名。仅声明一个变量 "v_pointNum"... 将值提取到循环内的变量中.... 并在同一循环中更新另一个 table 。 –

CREATE `SP_Point`()
BEGIN 

DECLARE v INT DEFAULT(0);
-- declare a variable to hold count value
DECLARE v_pointNum INT DEFAULT(0);
DECLARE serviceAttitudeLevelStr VARCHAR(800);

SET v = 1;  
WHILE v <= 5 DO 

    SELECT COUNT(*)  INTO v_pointNum from tbpoint where  Point=v;  

    -- update another table 
    update <mytable> set <mycol> = v_pointNum where <condition>;


        SET v = v + 1; 
 END WHILE; 
END