Здравствуйте! Создается процедура
delimiter //
create procedure largest_order(out largest_id int)
begin
declare this_id int;
declare this_amount float;
declare l_amount float default 0.0;
declare l_id int;
# установка значения параметра done по умолчанию равным 0 (то есть false)
declare done int default 0;
# курсор вытаскивает значения из столбцов orderid и amount таблицы orders
declare c1 cursor for select orderid, amount from orders;
# при достижении конца таблицы значение done становится равным 1 (true)
declare continue handler for sqlstate \'02000\' set done = 1;
open c1;
# выполняем цикл
repeat
fetch c1 into this_id, this_amount;
if not done then
if this_amount > l_amount then
set l_amount=this_amount;
set l_id=this_id;
end if;
end if;
# цикл выполняется пока выполняется это условие
until done end repeat;
close c1;
set largest_id=l_id;
end
//
delimiter ;
Вопрос такой: зачем в цикле repeat, выполняющемся до достижения курсором конца таблицы, идет еще одно условие на удачность выполнения функции fetch (выделено Bold\'ом)? Аналогичная форма записи встречается и в справочном руководстве по Mysql, хотя данный скрипт работает и без такого анализа. Зачем это нужно??