Показать сообщение отдельно
Старый 13.11.2012, 08:10   #57  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Narayana Посмотреть сообщение
Наверное, для того, чтобы производить вычисления в полях таблицы во время выборки ее записей в буфер табличной переменной, правильно эти вычисления подставлять вместо //do something.
Верно. Только с одной поправкой. Вычисления эти будут происходить не "во время", а "после" выборки очередной записи в буфер табличной переменной. Они [вычисления] непосредственно над этим выбранным буфером и будут происходить.
Цитата:
Сообщение от Narayana Посмотреть сообщение
А если мы строим запрос в АОТе?
Narayana, невозможно do something запихнуть в текст SQL запроса. Query, как уже говорилось, не содержит обрабатываемые данные, Query хранит только текст запроса. У него не предусмотренно никаких методов постобработки данных, потому что никакие данные он не обрабатывает. Данные обрабатывает QueryRun. Query только описывает какие данные будут доступны QueryRun'у и к сожалению это описание не предусматривает даже декларативного описания вычисляемых полей, не говоря уже о возможности процедурного вычисления do something.

Именно это ограничение я и имел в виду когда говорил о том что многие вещи "за один запрос" не решаются.
Стандартных выхода (о которых вам уже в этой ветке не раз говорили) два:
1) либо максимально отсрочить окончательные расчёты и перенести их на сторону интерфейсной части (display-методы)
2) либо, если вычисление требуется не в конце, а в середине процесса сбора данных, создавать вспомогательные таблицы, в которые складировать промежуточный результат.

Последний раз редактировалось S.Kuskov; 13.11.2012 в 08:33.
За это сообщение автора поблагодарили: lev (3).