|
|
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 16:53 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Если закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:06 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
И что неправильного в том, что select, возвращающий NOT FOUND, устанавливает done в true, чем и прерывает loop? Ты же сам ему это приказал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:30 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
romychkЕсли закоментировать select курсор выполняется положенное количество раз. При раскоментированном 9 раз из 5000 ...страно что такой плохой способ выхода из цикла везде пропагандируют.... если селект не найдет данные то может сработать хендлер и выставить DONE=TRUE. ...проверяйте конец курсора прямо после ФЕТЧА, например функцией FOUND_ROWS() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:47 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
romychk Код: sql 1. Хандлер срабатывает на ЛЮБОЙ 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:49 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, понял исправил запрос чтобы не возвращать not found ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:00 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
javajdbc, Если можна поделитесь примером, для общегоразвития ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:03 |
|
||
|
Не правильно працюють курсори в MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
romychkjavajdbc, Если можна поделитесь примером, для общегоразвития ...фундаментальная ошибки курсора с обработчиком ошибки: 1. еррор хандлер может сработать где угоно, даже внутри вызываемых процедур или функций. 2. результат срабатывания еррор хандлера не сбарсывается на самом деле, все что нужно -- после ФЕТЧА -- определить была ли выташена запись. для щтого достаточно : FOUND_ROWS() = 1 Эта функция гарантирована относится в последней выполнямой строчке. Fetch... some_kind_of_exit IF FOUND_ROWS() = 1 repeat ...работа с данными Fetch.... until FOUND_ROWS() = 1 end repeat; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 21:47 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=110&tid=1832129]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 338ms |

| 0 / 0 |
