Цитата:
Сообщение от
glibs
Хм... по-моему, в T-SQL при работе с курсором конструкция примерно такая же. Вы объявляете некий запрос в качестве курсора (он может содержать и агрегатные функции), а потом перебираете его строки. При этом вы тоже не работаете с конкретной записью.
Нуу, речь, скорее, идет не о том, что "не с конкретной записью", а о сомнительной наглядности синтаксисе конструкции... Авторы самого X++ уж больно всё лаконично попытались описать. И эта лаконичность, увы, часто не льет воду не мельницу понимания, а скорее наоборот выходит некоторым боком (во завернул!)
Вот, не мудрствуя, скопировал из хелпа по T-SQL кусочек примера с курсором:
Код:
DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40)
DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
если читать это как бы на естественном языке, то получается примерно следующее:
Код:
ОБЪЯВЛЯЕМ наши_переменные
ОБЪЯВЛЯЕМ наш_курсор КАК КУРСОР ДЛЯ
SELECT... (причем SELECT - на нормальном SQL!)
ОТКРЫВАЕМ наш_курсор
СЧИТЫВАЕМ ОЧЕРЕДНУЮ (запись) ИЗ наш_курсор
В наши_переменные
Акцентирую внимание на последнем: СЧИТЫВАЕМ запись
ИЗ наш_курсор
В наши_переменные.
ИЗ -
В,
ИЗ -
В.
А здесь что?
select sum(amount) from payTrans - ВЫБИРАЕМ СУММУ(amount) ИЗ... ВЫБИРАЕМ - ИЗ, ВЫБИРАЕМ - ИЗ. Ну,
ИЗ-то выбираем, а
ВО ЧТО выбираем-то? Вот и возникают непонятки. По-моему, вполне обоснованные.
У меня знакомство с подобного рода "проблемой" началось со встречи с примерно таким фрагментом:
select count(RecId) from RAssetTable
Уже к тому времени зная ответственно-почётную миссию идентификатора RecId во всей системе, мозг упорно отказывался понимать, что в этом фрагменте RecId является как бы не "самим собой", а содержит всего-навсего количество записей в конкретной таблице. Согласитесь, для "неокрепшего мозга", это немного башне-сносящая откровенность. "Мы понимаем, что мы чего-то не понимаем..."