Forum Webscript.Ru

Общие => Базы данных => Тема начата: PHP'шкин от 29 Ноября 2007, 21:29:13

Название: Объявление процедур
Отправлено: PHP'шкин от 29 Ноября 2007, 21:29:13
Здравствуйте! Создается процедура
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, хотя данный скрипт работает и без такого анализа. Зачем это нужно??