20.11.2014, 07:05 | #1 |
Участник
|
ttsbegin и зацикливание While select
Ранее еще с тройки время от времени использовал такую конструкцию например:
X++: ttsbegin; while select ledgerJournalTrans { i++; ... if (i mod 100 == 0) { ttscommit; ttsbegin; } } ttscommit; X++: while select ledgerJournalTrans { i++; if (first) { ttsbegin; first = false; } ... if (i mod 100 == 0) { ttscommit; ttsbegin; } } if (!first) ttscommit; Да так.. просто хотелось узнать от спецов по работе с СУБД физику процесса) |
|
20.11.2014, 11:26 | #2 |
Модератор
|
Цитата:
просто хотелось узнать от спецов по работе с СУБД физику процесса
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
21.11.2014, 07:39 | #3 |
Участник
|
Цитата:
Сообщение от Vadik
AX использует динамические курсоры. Если в процессе обработки меняется физическое местоположение записи (например, обновляется поле входящее в состав кластерного индекса или происходит расщепление страниц) запись может "дофетчиться" курсором повторно. Лечится разными способами - например, принудительной сортировкой по полям для которых гарантируется неизменность (например RecId)
Более того наблюдал обратную ситуации в подобном цикле. Записи удалялись внутри цикла удовлетворяющие условию селекта. Но цикл все равно перебирал непонятно откуда взятые уже удаленные записи. |
|
21.11.2014, 08:35 | #4 |
Участник
|
Аксапта закачивает данные порциями - по всей видимости, то что было удалено уже было прочитано и находилось в кэше
__________________
Axapta v.3.0 sp5 kr2 |
|
21.11.2014, 08:55 | #5 |
Участник
|
Цитата:
Ещё обсуждение похожего вопроса Как должен работать такой запрос Создается впечатление, что эти динамические курсоры имеют квантовую природу. Прямо-таки корпускулярно-волновой дуализм, какой-то. В одних случаях они фиксируют выборку перед её обходом, а в каких-то меняют её по ходу выполнения. Но сдается мне, что эта неопределенность в СУБД сидит, а не в аксапте. Последний раз редактировалось S.Kuskov; 21.11.2014 в 09:37. |
|