我正在使用以下存储过程,其中写入了以下游标代码(我使用PHPmyadmin执行代码
create procedure cursorproc(OUT p_out DECIMAL(10,2))
begin
declare l_salary, l_total DECIMAL(10,2);
declare cur_1 cursor for select line_distance from elements;
open cur_1;
set l_total = 0;
loop
fetch cur_1 into l_salary;
set l_total = l_total + l_salary;
end loop;
close cur_1;
set p_out = l_total;
end;
表格架构:
CREATE TABLE IF NOT EXISTS `elements` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`distance` int(11) NOT NULL,
`repeat` int(2) NOT NULL,
`interval` varchar(11) NOT NULL,
`eta` varchar(11) NOT NULL,
`best` varchar(11) NOT NULL,
`line_distance` int(5) NOT NULL,
`line_time` varchar(11) NOT NULL,
`intensity` varchar(11) NOT NULL,
`description` varchar(255) NOT NULL,
`best_time_event` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=215 ;
我收到以下错误:
ERROR - #1329 - No data - zero rows fetched, selected, or processed
可能是什么问题?请帮忙
答案 0 :(得分:1)
我对MySQL知之甚少,但错误信息非常清楚 - 你永远不会检查你的fetch是否实际返回数据/达到EOF,所以即使你的查询不再返回数据,你也会尝试获取。在MySQL文档中搜索“CONTINUE HANDLER”的信息。
更重要的问题是:为什么要使用存储过程呢?为什么 - 如果你必须 - 你是否使用一个简单的循环
select sum(line_distance) from elements
应该足够吗?
答案 1 :(得分:0)
你可以发现错误DECLARE CONTINUE HANDLER FOR NOT FOUND
请参阅:http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html
或者您可以计算sql将选择的行数,如果没有,则选择不读取它们