powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не правильно працюють курсори в MySQL 5.6
8 сообщений из 8, страница 1 из 1
Не правильно працюють курсори в MySQL 5.6
    #39174522
romychk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR select RadAcctId, username, IdUser,`in`, `out` from m_trafic_tmp;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
FETCH cur INTO zRadAcctId, zusername, zIdUser, old_in, old_out;
IF done THEN
LEAVE read_loop;
END IF;

insert into radius.tmp_tmp (tmp)values(concat(zIdUser, '-'));

select AcctInputOctets, AcctOutputOctets into zAcctInputOctets, zAcctOutputOctets from radacct where RadAcctId = zRadAcctId;

END LOOP;
CLOSE cur;

commit;
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174540
romychk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174573
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что неправильного в том, что select, возвращающий NOT FOUND, устанавливает done в true, чем и прерывает loop? Ты же сам ему это приказал!
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174583
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romychkЕсли закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000


...страно что такой плохой способ выхода из цикла
везде пропагандируют....
если селект не найдет данные то может сработать хендлер
и выставить DONE=TRUE.

...проверяйте конец курсора прямо после ФЕТЧА,
например функцией FOUND_ROWS()
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174585
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romychk
Код: sql
1.
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;


Хандлер срабатывает на ЛЮБОЙ not found. В том числе и на Empty set при выполнении SELECT.
manualNOT FOUND: Shorthand for the class of SQLSTATE values that begin with '02'
manualError: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)
Message: No data - zero rows fetched, selected, or processed
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174595
romychk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, понял исправил запрос чтобы не возвращать not found
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174600
romychk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Если можна поделитесь примером, для общегоразвития
...
Рейтинг: 0 / 0
Не правильно працюють курсори в MySQL 5.6
    #39174786
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romychkjavajdbc,

Если можна поделитесь примером, для общегоразвития

...фундаментальная ошибки курсора с обработчиком ошибки:
1. еррор хандлер может сработать где угоно, даже
внутри вызываемых процедур или функций.
2. результат срабатывания еррор хандлера не сбарсывается


на самом деле, все что нужно -- после ФЕТЧА --
определить была ли выташена запись.
для щтого достаточно :
FOUND_ROWS() = 1
Эта функция гарантирована относится в последней
выполнямой строчке.

Fetch...
some_kind_of_exit IF FOUND_ROWS() = 1

repeat
...работа с данными
Fetch....
until FOUND_ROWS() = 1
end repeat;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не правильно працюють курсори в MySQL 5.6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]