Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не правильно працюють курсори в MySQL 5.6 / 8 сообщений из 8, страница 1 из 1
18.02.2016, 16:53
    #39174522
romychk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
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
18.02.2016, 17:06
    #39174540
romychk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
Если закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000
...
Рейтинг: 0 / 0
18.02.2016, 17:30
    #39174573
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
И что неправильного в том, что select, возвращающий NOT FOUND, устанавливает done в true, чем и прерывает loop? Ты же сам ему это приказал!
...
Рейтинг: 0 / 0
18.02.2016, 17:47
    #39174583
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
romychkЕсли закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000


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

...проверяйте конец курсора прямо после ФЕТЧА,
например функцией FOUND_ROWS()
...
Рейтинг: 0 / 0
18.02.2016, 17:49
    #39174585
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
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
18.02.2016, 18:00
    #39174595
romychk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
Большое спасибо, понял исправил запрос чтобы не возвращать not found
...
Рейтинг: 0 / 0
18.02.2016, 18:03
    #39174600
romychk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
javajdbc,

Если можна поделитесь примером, для общегоразвития
...
Рейтинг: 0 / 0
18.02.2016, 21:47
    #39174786
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно працюють курсори в MySQL 5.6
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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не правильно працюють курсори в MySQL 5.6 / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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