MYSQL游标实现问题

时间:2011-08-09 06:20:26

标签: mysql

我正在使用以下存储过程,其中写入了以下游标代码(我使用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

可能是什么问题?请帮忙

2 个答案:

答案 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将选择的行数,如果没有,则选择不读取它们