Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Помогите разобрать в чем ошибка....


Автор: chiffa 21.3.2017, 18:40
Всем доброе время суток. Сижу смотрю на код и никак не могу вьехать, что не так и почему не отрабаватыет. Есть хранимая процедура:

Код

BEGIN
DECLARE cursor_finished INTEGER DEFAULT 0;
DECLARE PriceGet FLOAT;
DECLARE MenuidGet INT(11); 
DECLARE CustIdGet id(11);
DECLARE TOTAL_COST FLOAT;

DECLARE cur1 CURSOR FOR
select a.price, a.id from menu a where FIND_IN_SET (a.id, menu_id_ins);


DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursor_finished = 1;


-- SELECT id INTO CustIdGet FROM customers where `COUNTRY` = SUBSTRING(tel_num_ins,1,3) and `CODE` = SUBSTRING(tel_num_ins,4,2) and `TELNUM` = SUBSTRING(tel_num_ins,6,7);

SET @I=1;



SET TOTAL_COST = 0.00;

OPEN cur1;

 REPEAT        
 FETCH cur1 INTO PriceGet, MenuidGet;
 

 IF cursor_finished = 0 THEN

SET TOTAL_COST=TOTAL_COST+PriceGet;


SET @I=@I+1;

 END IF;



 Until cursor_finished END REPEAT;
    CLOSE cur1;
    
    SELECT TOTAL_COST;
        

END




при таком раскладе курсор отрабатывает нормально, но стоит только расскоментировать строку 

Код

SELECT id INTO CustIdGet FROM customers where `COUNTRY` = SUBSTRING(tel_num_ins,1,3) and `CODE` = SUBSTRING(tel_num_ins,4,2) and `TELNUM` = SUBSTRING(tel_num_ins,6,7);


процедура перестает входи в курсор SELECT TOTAL_COST выводит 0.00

Подскажите, в чем может быть проблема? Заранее спасибо

Автор: Akina 21.3.2017, 19:46
Цитата(chiffa @  21.3.2017,  19:40 Найти цитируемый пост)
стоит только расскоментировать строку

Значит, она не возвращает записей. Срабатывает хандлер. "Вход в курсор", как ты выразился, при этом таки происходит, но из-за строки 29 суммирования нет, а из-за строки 40 цикл сразу заканчивается, хотя в курсоре ещё есть записи.

Автор: chiffa 22.3.2017, 13:32
спасибо за ответ! И как быть в такой ситуации?

Автор: Akina 22.3.2017, 15:10
Зачем тебе этот селект, если его результат больше нигде не используется? так и оставь его закомментированным.

Автор: chiffa 22.3.2017, 15:31
далее будет использоваться CustIdGet

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)