GTT – global temporary tables, таблицы которые наполняются и очищаются в рамках ABAP-сессии (application session), но находятся при этом на уровне БД (то есть данные не передаются между Database и Application).
В ABAP-разработке их можно перевести как глобально сессионные таблицы или словарно-сессионные таблицы.
Что такое temporary tables?
В базах данных Temporary table – это объект на уровне базы данных, куда могут быть помещены данные после выборки из таблиц БД; при этом данные существуют в рамках сессии приложения и не передаются из базы на application, а остаются в базе. Это дает возможность применять SQL-операторы к «промежуточным» данным для вычислений и не делать дополнительные roundtrip между application и базой. В терминах ABAP-разработки temporary table можно рассматривать как альтернативу «промежуточным» внутренним таблицам или операторам UNION.
Temporary tables реализованы в различных базах: PostgreSQL, ORACLE, HANA . Назначение их, по сути, одно и то же: в течение сессии сложить данные в таблицу, а по итогу сессии забрать данные и очистить таблицу.
GTT в ABAP представляет собой отдельную прозрачную таблицу, в которую складываются данные в рамках DB LUW и могут быть считаны только в рамках текущей сессии. На начало сессии и на завершение таблица должна быть пустая (очищена принудительной командой через ABAP, если нужно). Цель GTT – это дать возможность разделить сложную выборку на несколько шагов. За счет того, что данные хранятся в рамках одной сессии, то «закулисное администрирование» такой таблицы немного меньше. Можно сказать, что временная таблица работает почти как внутренняя таблица, но остаётся на стороне базы данных.
Демонстрационный пример в ABAP
Как правило, temporary table полезна, когда нужно получить данные из источников, которые имеют разное смысловое назначение, но сводятся к одной и той же структуре данных.
Пример: нужно получить список (MATNR) материалов, которые указаны в заказах на дату DATE1 и указаны в фактурах на дату фактурирования DATE1.
В SAP ERP (и как правило, в других системах тоже) заказы и фактуры находятся в разных таблицах, а также заголовок и позиция этих сущностей также находятся в разных таблицах (и даже не в одной
