SELECT во внутренней таблице

Начиная с версии 7.52 ABAP позволяет делать внутреннюю таблицу источником данных.
Существует два варианта выполнения подобного запроса:
1. Выполнение операции на стороне сервера приложений. Работает только с операциями которые поддерживают работу с буфером.

2. Выполнение на стороне базы данных.
Для выполнения второго случая, операция должна поддерживаться самой базой данных. Иначе получаете исключение CX_SY_SQL_UNSUPPORTED_FEATURE. (удалось выполнить только в системе с HANA. Сомневаюсь, что другие БД поддерживают данную операцию)
Есть некоторые ограничения при использовании:
- Можно указать только одну внутреннюю таблицу;
- Необходимо указать псевдоним при помощи оператора AS;
- Внутренняя таблица не должна содержать устаревшие типы данных DF16_SCL и DF34_SCL ;
- Если используется дополнение ORDER BY PRIMORY KEY, должен быть указан первичный ключ;
- Внутренняя таблица может иметь строки элементарного типа и или структуру, но не может иметь вложенных подструктур;
- Внутренняя таблица должно иметь явно определенный первичный ключ;
- Нельзя при статическом указании таблицы во FROM использовать обобщённые типы таблиц (вроде INDEX TABLE). Обобщённые типы могут быть использованы при динамическом FROM;
- Строки со ссылкой на SSTRING обрабатываются как строки с фиксированной длинной и игнорированием завершающих пробелов.

Теперь рассмотрим 1 вариант. Выбор у нас не особо большой

По рекомендациям применять Select к внутренней таблице стоит только если у нас данная операция не возможна через классические READ и LOOP AT,  т.к. классическое чтение работает побыстрее.

Для следующей операции уже нужна БД

Пример с объединением данных из таблицы БД и внутренней уже интереснее.(Пока возьму из документации, т.к. пропал доступ к подходящей системе)

Наиболее полезно будет для замены FOR ALL ENTRIES, т.к. он, например, не работает с функциями агрегации.

Если потребуется использовать, например, GROUP BY, способ с внутренней будет очень даже к месту. 

Ссылка на документацию

SELECT во внутренней таблице: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован.