Mysql在where子句中使用varchar变量存储过程问题

时间:2014-05-12 08:13:44

标签: mysql sql stored-procedures where-clause varchar

我在mysql存储过程中遇到问题,其中where子句中的varchar变量不会返回结果。查询如下:

declare itcode varchar(30);
declare qty int;
declare finished int;
declare testc cursor for 
    select itemcode from mytable limit 0,10;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
open testc;
read_loop:Loop
    fetch testc into itcode;
    if finished=1 then
        leave read_loop;
    end if;
    select sum(Qty) as total from 
            mytable2 
            where itemcode=itcode;
end loop;
close testc;

在上面的语句中,即使两个表上都存在项代码,它也会返回null。但是,如果我使用手动指定的值在下面的close处写下该语句,则可以正常工作。

select sum(Qty) as total from mytable2 where itemcode='p2343';

我无法弄清楚为什么varchar变量不适用于where子句。有人可以让我帮我弄清楚如何解决这类问题吗?

注意:两个表列都是varchar(30)。

附加说明:当我更改下面的语句时,它也会打印itcode中的值。

select sum(Qty) as total,itcode from mytable2 where itemcode=itcode

因此itcode具有值' p2343'但上述存储过程无效。

1 个答案:

答案 0 :(得分:2)

问题在于,该过程引用了您的全局变量qty,而支持Qty上的mytable2列。尝试更改此内容:

declare qty int;

到这个

declare v_qty int;