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.

  • 📋 Definicja podstawowa: Tabela wewnętrzna przechowuje wiersze o identycznej strukturze w pamięci głównej, najczęściej w celu sformatowania danych odczytanych z tabeli bazy danych.
  • 🧾 Rola w obszarze roboczym: Obszar roboczy to pojedynczy wiersz o tym samym formacie co tabela. Przetwarza on tabelę wiersz po wierszu.
  • 🏷️ Nagłówek: Tabela z wierszem nagłówka otrzymuje domyślny obszar roboczy, dzięki czemu wiersze można wstawiać lub odczytywać bezpośrednio, bez konieczności podawania nazwy.
  • 🛠️. Cztery metody tworzenia: Polecenie TYPES, odwołanie do istniejącej tabeli, odwołanie do istniejącej struktury lub nowa struktura zadeklarowana za pomocą OCCURS.
  • Zaludniać: APPEND dodaje jeden wiersz, COLLECT agreguje pola numeryczne dla zduplikowanego klucza, a INSERT umieszcza wiersz pod wybranym indeksem.
  • 🔍 Przeczytaj i skopiuj: LOOP AT odczytuje każdy wiersz, READ TABLE odczytuje jeden wiersz po indeksie, a MOVE lub znak równości kopiuje całą tabelę.
  • 🗑️ Kasować: Instrukcja DELETE wewnątrz pętli usuwa bieżący wiersz, a instrukcja DELETE … INDEX usuwa wiersz w znanej pozycji.

SAP Tabele wewnętrzne ABAP

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

Różnica między stołem wewnętrznym a obszarem roboczym

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.

  1. Tabele wewnętrzne z linią HEADER
  2. 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.

FAQ

Polecenie CLEAR itab opróżnia tylko wiersz nagłówka, a CLEAR itab[] opróżnia treść. Polecenie REFRESH zawsze opróżnia treść, ale zachowuje zarezerwowaną pamięć. Polecenie FREE opróżnia treść i zwalnia również pamięć.

SY-TABIX przechowuje numer wiersza aktualnie przetwarzanej tabeli wewnętrznej. SY-INDEX przechowuje numer przebiegu pętli DO lub WHILE. Tabela haszowana pozostawia SY-TABIX na zero, ponieważ nie ma indeksu.

PĘTLA AT itab PRZYPISUJĄC symbol pola unika kopiowania każdego wiersza do obszaru roboczego, dzięki czemu działa szybciej w przypadku dużych tabel i umożliwia zmianę wiersza w miejscu bez użycia polecenia MODIFY.

Tak. Asystenci AI w narzędziach programistycznych ABAP przepisują deklaracje OCCURS i wiersza nagłówka do TYPE STANDARD TABLE OF z wyraźnym obszarem roboczym i sygnalizują polecenia, które ulegają uszkodzeniu po zniknięciu wiersza nagłówka.

Doradcy ds. wydajności AI sprawdzają sposób wypełniania i odczytywania tabeli, a następnie rekomendują tabelę posortowaną lub haszowaną, gdy w środowisku wykonawczym dominuje wyszukiwanie liniowe. Rekomendacja jest potwierdzana za pomocą trace w transakcji SAT.

Podsumuj ten post następująco: