Pokud je potřeba procházet kolekce dat, tak konstrukce LOOP AT je jedna z nejlepších variant. Kolekcí dat v tomto případě jsou myšleny interní tabulky, které jsou naplněny z databázových tabulek, nebo data typu range.
Musíme si ovšem dát pozor, protože zanoření více, než dvou LOOP struktur do sebe je velmi nežádoucí zejména z hlediska časové složitosti. Pokud budeme přepokládat, že příkaz běží v konstantním čase a jsou do sebe vnořené pouze dvě LOOP kontrukce, tak doba běhu pro vykonání vnější kontrukce je kvadratická O(n2).
Z hlediska konkrétního příkladu: Dvě interní tabulky, které obě obsahují 100 prvků a jsou procházeny do sebe vnořenými konstrukcemi LOOPu. Počet průchodů prvního LOOPu bude 100×100 = 10 000 průchodů. Pokud přidáme další konstrukci LOOP, bude počet průchodů 100x100x100 = 1 000 0000 průchodů.
Ukázka konstrukce i s datovou definicí a vysvětlením:
- konstrukce
Inline deklarace INTO @DATA() umožňuje deklarovat datovou strukturu, která je stejná jako datový typ řádek tabulky a překopíruje z ní do struktury data.
Přístup na atribut datové struktury se provádí pomocí pomlčky ( ls_data-atribut ).
LOOP AT ... INTO @DATA(ls_data).
ENDLOOP.
2. konstrukce
Inline deklarace REFFERENCE INTO @DATA() umožňuje deklarovat referenci(odkaz) na datovou strukturu, která je stejná jako datový typ řádek tabulky, kterou procházíme. Umožňuje snadnější manipulaci s daty, bez nutnosti vytvoření kopie. Tzn., že pomocí reference můžeme měnit data v tabulce, přes kterou procházíme.
Přístup na atribut datové struktury se provádí pomocí pomlčky a šipky ( lr_data->atribut ), abychom mohli do datové struktury přiřadit proměnnou, tak je nutné strukturu dereferencovat pomocí ->* umožňuje to tedy přiřadit do atributu námi požadovanou hodnotu ( lr_data->* ).
LOOP AT ... REFFERENCE INTO @DATA(lr_data).
ENDLOOP.
Inline deklarace ASSIGNING FIELD-SYMBOL() umožňuje deklarovat ukazatel na datovou strukturu, která je stejná jako datový typ řádek tabulky. Obsahuje tedy adresu paměti, kde je daná struktura uložena a umožňuje k ní přístup. Pomocí ukazatele můžeme měnit data v tabulce, přes kterou procházíme.
Přístup na atribut datové struktury se provádí pomocí pomlčky ( <line>-atribut ).
LOOP AT ... ASSIGNING FIELD-SYMBOL(<line>).
ENDLOOP.