SAP Tabela wewnętrzna ABAP: twórz, czytaj, wypełniaj, kopiuj i usuwaj
⚡ Inteligentne podsumowanie
SAP Obiekty tabeli wewnętrznej ABAP przechowują dane ze stałej struktury do dynamicznego wykorzystania w programie. Ta strona wyjaśnia obszary robocze, wiersze nagłówków, cztery metody tworzenia oraz polecenia wypełniające, kopiujące, odczytujące i usuwające wiersze tabeli.
Co to jest tabela wewnętrzna?
TABELA WEWNĘTRZNA służą do uzyskiwania danych ze stałej struktury do dynamicznego wykorzystania w ABAP. Każda linia w tabeli wewnętrznej ma tę samą strukturę pól. Głównym zastosowaniem tabel wewnętrznych jest przechowywanie i formatowanie danych z tabeli bazy danych w programie.
Wewnętrzny stół zawsze współgra z obszarem roboczym, więc ta koncepcja pojawia się jako następna.
Czym jest obszar roboczy?
Obszary robocze to pojedyncze wiersze danych. Powinny mieć taki sam format jak wszystkie tabele wewnętrzne. Służy do przetwarzania danych w tabeli wewnętrznej wiersz po wierszu.
Różnica między stołem wewnętrznym a obszarem roboczym?
Obraz mówi tysiąc słów
Diagram przedstawia tabelę zawierającą wiele wierszy, podczas gdy obszar roboczy zawiera tylko wiersz aktualnie przetwarzany. To, czy obszar roboczy został utworzony przez system, czy przez programistę, zależy od typu tabeli opisanego poniżej.
Rodzaje tabel wewnętrznych
Istnieją dwa typy tabel wewnętrznych.
- Tabele wewnętrzne z linią HEADER
- Tabele wewnętrzne bez linii HEADER.
Tabele wewnętrzne z linią nagłówka
- Tutaj system automatycznie tworzy obszar roboczy.
- Obszar roboczy ma ten sam typ danych co tabela wewnętrzna.
- Ten obszar roboczy nazywany jest linią HEADER.
- To tutaj dokonuje się wszystkich zmian lub jakichkolwiek działań na zawartości tabeli. Dzięki temu rekordy można bezpośrednio wstawiać do tabeli lub uzyskać do nich dostęp bezpośrednio z tabeli wewnętrznej.
Tabele wewnętrzne bez linii nagłówka :
- Tutaj nie ma obszaru roboczego powiązanego ze stołem.
- Obszar roboczy należy wyraźnie określić, gdy potrzebujemy dostępu do takich tabel.
- Dlatego nie można uzyskać bezpośredniego dostępu do tych tabel.
💡 Wskazówka: Tabela z wierszem nagłówka nosi tę samą nazwę co tabela i jej obszar roboczy, co sprawia, że kod jest niejednoznaczny. Nowe programy powinny deklarować tabelę bez wiersza nagłówka i przekazywać jawny obszar roboczy.
Standardowe, sortowane i haszowane tabele wewnętrzne
Oprócz rozróżnienia wiersza nagłówka, każda tabela wewnętrzna ma również rodzaj tabeli, który decyduje o sposobie wyszukiwania wiersza. Rodzaj jest wybierany za pomocą TYPE STANDARD TABLE, TYPE SORTED TABLE lub TYPE HASHED TABLE i ma bezpośredni wpływ na czas wykonania.
| Rodzaj stołu | Metoda dostępu | Klawisz | Najlepiej stosować do |
|---|---|---|---|
| Standardowe | Indeks i klucz z liniowym wyszukiwaniem po kluczu | Nieunikalny | Przetwarzanie sekwencyjne i małe tabele odczytywane za pomocą indeksu |
| Sortowane | Indeks i klucz z wyszukiwaniem binarnym według klucza | Unikalne lub nieunikalne, sortowane automatycznie | Większe tabele są odczytywane wielokrotnie przez wiodące pola kluczowe |
| Hashed | Tylko klucz, z algorytmem haszującym | Wyjątkowy | Bardzo duże tabele, które są zawsze odczytywane pełnym kluczem, np. bufor rekordów bazy danych |
Standardowa tabela jest domyślna i nadaje się do przetwarzania sekwencyjnego. Tabela haszowana utrzymuje stały czas dostępu niezależnie od liczby przechowywanych wierszy, dlatego reguły wydajności Otwórz SQL polecam do buforowania rekordów.
Tworzenie tabel wewnętrznych
Istnieje wiele sposobów tworzenia tabeli wewnętrznej. Przyjrzyjmy się im jeden po drugim-
1. Używając instrukcji typu
Utwórzmy teraz tabelę wewnętrzną itab przy użyciu polecenia TYPE.
Składnia to –
Types : begin of line, column1 type I, column2 type I, end of line.
Przykład:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Instrukcja TYPES tworzy zdefiniowaną linię struktury.
Aby utworzyć tabelę wewnętrzną itab użyj następującego polecenia:
Data itab type line occurs 10.
Tworzona jest wewnętrzna tabela itab o strukturze line. Oprócz zadeklarowania struktury wewnętrznej tabeli, klauzula OCCURS określa również, ile wpisów tabeli jest przechowywanych w pamięci głównej (w tym przypadku 10). Dodatkowe rekordy są zapisywane w obszarze stronicowania i mogą mieć wpływ na wydajność
2.Przez odniesienie do innej Tabeli
Możesz utworzyć tabelę wewnętrzną, odwołując się do istniejącej tabeli. Istniejąca tabela może być tabelą standardową. SAP stół, stół Z lub inny stół wewnętrzny.
Składnia-
Data <f> <type> [with header line].
Przykład-
DATA itab TYPE line OCCURS 10 with header line.
Tutaj tworzona jest wewnętrzna tabela itab z linii typu z linią nagłówka. Należy pamiętać, że opcja „z linią nagłówka” jest opcjonalna.
3.Odnosząc się do istniejącej Struktury
Składnia-
Data <f> LIKE <struct> occurs n [with header line].
Przykład-
DATA itab LIKE sline OCCURS 10.
Tutaj tworzona jest tabela itab o takiej samej strukturze jak sline
4. Tworząc nową Strukturę
Stwórzmy teraz tabelę wewnętrzną z naszą własną strukturą. Tutaj tworzona jest tabela z linią nagłówka, domyślnie.
Składnia –
Data : Begin of <f> occurs <n>, <component declaration>, ................................, End of <f>.
Przykład -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Utworzono wewnętrzną tabelę itab
Pusta tabela nie jest zbyt przydatna, więc następna sekcja wypełnia ją wierszami.
Wypełnianie tabel wewnętrznych
Teraz, gdy pomyślnie utworzyliśmy kilka tabel wewnętrznych, zobaczmy, jak wypełnić je niektórymi rekordami. Dostępne są różne metody wypełniania tabel
1. Dołącz dane linia po linii
Pierwszą dostępną metodą jest użycie instrukcji APPEND.
Za pomocą instrukcji APPEND możemy albo dodać jedną linię z innego obszaru roboczego do tabeli wewnętrznej, albo możemy dodać jedną linię początkową do tabeli wewnętrznej.
Składnia –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Tutaj miejsce pracy lub Wiersz początkowy jest dodawany do tabeli wewnętrznej .
Zmienna systemowa SY-TABIX zawiera indeks dołączonej linii.
Przykład:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Wyniki: '' '0'
Funkcja „Initial lines” dodaje do tabeli wiersz zainicjowany wartością poprawną dla jego typu. W tym przypadku col1 to znak, a col2 to liczba całkowita. Następnie funkcja „APEND initial line” dodaje wiersz zainicjowany w odniesieniu do typu danych kolumn, tj. spacja dla col1 i 0 dla col2.
2. Korzystanie z instrukcji COLLECT
COLLECT to kolejna forma instrukcji używana do wypełniania tabel wewnętrznych. Ogólnie rzecz biorąc, COLLECT jest używany podczas wstawiania linii do wewnętrznej tabeli za pomocą unikalnego standardowego klucza.
Składnia-
COLLECT [<wa> INTO] <itable>.
W przypadku tabel z linią nagłówka opcja INTO jest pomijana. Załóżmy, że istnieje już wpis mający taki sam klucz jak ten, który próbujesz dodać, a następnie do tabeli nie jest dodawany nowy wiersz, ale dodawane są pola numeryczne obu wpisów i obecny jest tylko jeden wpis odpowiadający kluczowi . Wartość SY-TABIX zostaje zmieniona na wiersz oryginalnego wpisu. W przeciwnym razie COLLECT działa podobnie do APPEND, a SY-TABIX zawiera indeks przetwarzanej linii.
3.Korzystanie z polecenia INSERT
Instrukcja INSERT dodaje wiersz/obszar roboczy do tabeli wewnętrznej. Możesz określić pozycję, w której ma zostać dodany nowy wiersz, używając klauzuli INDEX z instrukcją INSERT.
Składnia
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Tutaj obszar roboczy lub INICJAŁ LINE jest wstawiany do tabeli wewnętrznej indeks .
Kopiowanie tabel wewnętrznych
Zawartość jednej tabeli wewnętrznej można skopiować do innej, korzystając z funkcji APPEND LINES lub WSTAW LINEInstrukcja S. Prostszym sposobem jest użycie dowolnej z następujących składni.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Kopiują one zawartość ITAB1 do ITAB2. W przypadku tabel wewnętrznych z linią nagłówka musimy użyć [] w celu odróżnienia od obszaru roboczego. Zatem, aby skopiować zawartość tabel wewnętrznych z linią nagłówka, składnia wygląda następująco:
itab1[] = itab2[].
Przeczytaj tabele wewnętrzne
Znamy już tworzenie tabel wewnętrznych i wypełnianie ich danymi. Zobaczymy teraz, jak faktycznie korzystać z danych lub pobierać je z tabel wewnętrznych.
1. Korzystanie z pętli -Endloop
Jednym ze sposobów dostępu lub odczytu tabeli wewnętrznej jest użycie LOOP-ENDLOOP.
Składnia
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Tutaj, gdy powiesz LOOP AT ITABLE, wewnętrzna tabela ITABLE będzie czytana wiersz po wierszu. Dostęp do wartości kolumn dla tej linii można uzyskać w dowolnej części struktury LOOP-ENDLOOP. Wartość SY-SUBRC jest ustawiona na 0, nawet jeśli odczytywany jest tylko jeden rekord.
2. Korzystanie z CZYTAJ
Inną metodą odczytu tabeli wewnętrznej jest użycie instrukcji READ.
Składnia-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
To polecenie odczytuje bieżący wiersz lub wiersz określony przez indeks Wartość zmiennej SY-TABIX to indeks odczytanego wiersza. Jeśli zostanie znaleziony wpis o określonym indeksie, zmienna SY-SUBRC zostanie ustawiona na 0. Jeśli określony indeks jest mniejszy niż 0, wystąpi błąd w czasie wykonywania. Jeśli określony indeks przekracza rozmiar tabeli, zmienna SY-SUBRC zostanie ustawiona na 4.
⚠️ Ostrzeżenie: READ TABLE … INDEX 0 powoduje błąd czasu wykonania, dlatego przed uruchomieniem instrukcji należy sprawdzić indeks obliczony w czasie wykonania.
Usuwanie tabel wewnętrznych
Istnieje wiele sposobów usuwania linii z tabeli wewnętrznej.
1.Usuwanie linii w pętli.
Jest to najprostszy sposób usuwania linii.
Składnia
DELETE <ITABLE>.
Ta instrukcja działa tylko w pętli. Usuwa bieżącą linię. Możesz warunkowo usunąć linie w pętli, dodając klauzula GDZIE.
2.Usuwanie linii za pomocą indeksu.
Służy do usunięcia linii z tabeli wewnętrznej pod dowolnym znanym indeksem.
Składnia
DELETE <ITABLE> INDEX <IDX>.
Linia z indeksem jest usuwany. Indeks następnego wiersza jest zmniejszany o 1.
3. Usuwanie duplikatów wierszy.
Duplikaty wierszy są usuwane po posortowaniu tabeli według pól kluczowych.
SORT itab BY col1. DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
Porównywane są tylko sąsiadujące wiersze, dlatego najpierw należy wykonać polecenie SORT. Aby całkowicie opróżnić tabelę, użyj polecenia CLEAR itab[] lub REFRESH itab.


