我有一个存储过程,它从table1中选择值,然后将值插入表3 select id语句可以返回多个值或单个值。我已经编写了这个存储过程,但是当我运行它时,它会无限循环。
myprocedurename (IN vXID Int(11), IN vYint(21))
BEGIN
SET @myId =( select GROUP_CONCAT(id) from table1 where
Xid = vXID);
SET @POS =000;
select @myId , @POS;
WHILE (LOCATE(',', @myId ) > 0)
DO
SET @value = ELT(1, @myId );
SET @STR = SUBSTRING(@myId , 1, LOCATE(',',@myId )-1);
SET @myArrayOfValue = SUBSTRING(@myId , LOCATE(',', @myId ) + 1);
Set @pos = @POS +1;
Set @u_id = (select u_id from table2 where
c_id = vYint and track_id = @STR);
Set @duration = (select duration from table2 where
c_id = vYint and track_id = @STR);
INSERT INTO table3
(`id1`,
`pos`,
`id2`,
`id3`,
`duration`)
VALUES
(vYint ,
@pos,
@STR,
@u_id,
@duration);
END WHILE;
END
我想要做的就是当我在第一次选择中获得多个值时,我想循环遍历它们并且能够为每个值插入。
答案 0 :(得分:2)
您的定位不会占据起始位置,因此始终会找到第一个','
LOCATE (search str, str, [position])
您的代码中有pos
但您未在定位中使用它。
尝试
WHILE (LOCATE(',', @myId , pos ) > 0)