Для достижения того, что вы хотите (и я предполагаю, что вам нужны поля Dynami c SELECT), вы не можете использовать здесь встроенные объявления, как в L OOP, так и в SELECT:
Структура набора результатов должна быть статически идентифицируемой. Список SELECT и предложение FROM должны быть указаны статически, а переменные хоста в списке SELECT не должны быть общими c.
Таким образом, вы либо используете встроенную, либо динамическую, а не то и другое вместе.
Вот фрагмент, который иллюстрирует хорошее предложение Сандры:
TYPES: BEGIN OF ty_value_tab,
instance TYPE char18,
symbol_id TYPE id,
END OF ty_value_tab.
DATA: it_atinn TYPE string_table.
DATA: rt_atinn TYPE RANGE OF atinn,
value TYPE ty_value_tab,
values_tab TYPE RANGE OF ty_value_tab,
ibsymbol_tab TYPE TABLE OF ibsymbol.
rt_atinn = VALUE #( FOR value_atinn IN it_atinn ( sign = 'I' option = 'EQ' low = value_atinn ) ).
APPEND VALUE ty_value_tab( instance = 'ATWRT' ) TO values_tab.
LOOP AT values_tab INTO value.
SELECT (value-instance)
FROM ibsymbol
WHERE symbol_id = @value-symbol_id
AND atinn IN @rt_atinn
APPENDING CORRESPONDING FIELDS OF TABLE @ibsymbol_tab.
ENDLOOP.
В целом, нет смысла выбирать ibsymbol
в l oop, потому что в нем всего 8 полей, поэтому вы можете легко собрать все необходимые поля из values_tab
и передать их как Dynami c fieldstring.
Если вы хотите использовать псевдоним CUOBJ для своего поля Dynami c, вы должны добавить его следующим образом:
LOOP AT values_tab INTO value.
DATA(aliased_value) = value-instance && ` AS cuobj `.
SELECT (aliased_value)
...
Помните, что ваш псевдоним должен существовать среди ibsymbol
полей, иначе в случае объявления stati c ibsymbol_tab
этот оператор выдаст короткий дамп.