ABAP
Tabele wewnętrzne
Szukaj…
Rodzaje wewnętrznych tabel
DATA: <TABLE NAME> TYPE <SORTED|STANDARD|HASHED> TABLE OF <TYPE NAME>
WITH <UNIQUE|NON-UNIQUE> KEY <FIELDS FOR KEY>.
Standardowy stół
Ta tabela zawiera wszystkie wpisy przechowywane w sposób liniowy, a rekordy są dostępne w sposób liniowy. W przypadku dużych rozmiarów stołu dostęp do stołu może być powolny.
Posortowany stół
Wymaga dodatku WITH UNIQUE | NON-UNIQUE KEY . Wyszukiwanie jest szybkie ze względu na wyszukiwanie binarne. Wpisy nie mogą być dołączane do tej tabeli, ponieważ może to złamać porządek sortowania, dlatego zawsze są wstawiane za pomocą słowa kluczowego INSERT .
Tabela mieszania
Wymaga dodatku WITH UNIQUE | NON-UNIQUE KEY . Używa zastrzeżonego algorytmu mieszającego, aby zachować pary klucz-wartość. Teoretycznie wyszukiwania mogą być tak wolne jak tabela STANDARD ale praktycznie są one szybsze niż tabela SORTED zajmują stały czas, niezależnie od wielkości tabeli.
Deklaracja wewnętrznych tabel ABAP
Deklaracja tabeli wewnętrznej na podstawie lokalnej definicji typu
" Declaration of type
TYPES: BEGIN OF ty_flightb,
id TYPE fl_id,
dat TYPE fl_date,
seatno TYPE fl_seatno,
firstname TYPE fl_fname,
lastname TYPE fl_lname,
fl_smoke TYPE fl_smoker,
classf TYPE fl_class,
classb TYPE fl_class,
classe TYPE fl_class,
meal TYPE fl_meal,
service TYPE fl_service,
discout TYPE fl_discnt,
END OF lty_flightb.
" Declaration of internal table
DATA t_flightb TYPE STANDARD TABLE OF ty_flightb.
Deklaracja oparta na tabeli bazy danych
DATA t_flightb TYPE STANDARD TABLE OF flightb.
Deklaracja wbudowanej tabeli wewnętrznej
Wymaga wersji ABAP> 7.4
TYPES t_itab TYPE STANDARD TABLE OF i WITH EMPTY KEY.
DATA(t_inline) = VALUE t_itab( ( 1 ) ( 2 ) ( 3 ) ).
Tabela wewnętrzna z deklaracją linii nagłówka
W ABAP istnieją tabele z wierszami nagłówka i tabele bez wierszy nagłówka. Tabele z wierszami nagłówka są starszą koncepcją i nie powinny być używane w nowych projektach.
Tabela wewnętrzna: Tabela standardowa z / bez linii nagłówka
Ten kod deklaruje tabelę i_compc_all z istniejącą strukturą compc_str .
DATA: i_compc_all TYPE STANDARD TABLE OF compc_str WITH HEADER LINE.
DATA: i_compc_all TYPE STANDARD TABLE OF compc_str.
Tabela wewnętrzna: Tabela mieszana z / bez linii nagłówka
DATA: i_map_rules_c TYPE HASHED TABLE OF /bic/ansdomm0100 WITH HEADER LINE
DATA: i_map_rules_c TYPE HASHED TABLE OF /bic/ansdomm0100
Deklaracja obszaru roboczego dla tabel bez nagłówka
Obszar roboczy (zwykle skracany wa ) ma dokładnie taką samą strukturę jak tabela, ale może zawierać tylko jedną linię (WA to struktura tabeli z tylko jednym wymiarem).
DATA: i_compc_all_line LIKE LINE OF i_compc_all.
Czytaj, pisz i wstaw do tabel wewnętrznych
Czytaj, pisz i wstaw do wewnętrznych tabel za pomocą linii nagłówka:
" Read from table with header (using a loop):
LOOP AT i_compc_all. " Loop over table i_compc_all and assign header line
CASE i_compc_all-ftype. " Read cell ftype from header line from table i_compc_all
WHEN 'B'. " Bill-to customer number transformation
i_compc_bil = i_compc_all. " Assign header line of table i_compc_bil with content of header line i_compc_all
APPEND i_compc_bil. " Insert header line of table i_compc_bil into table i_compc_bil
" ... more WHENs
ENDCASE.
ENDLOOP.
Przypomnienie: tabele wewnętrzne z wierszami nagłówka są zabronione w kontekstach obiektowych. Zawsze zaleca się stosowanie tabel wewnętrznych bez linii nagłówka.
Odczytywanie, zapisywanie i wstawianie do wewnętrznych tabel bez wiersza nagłówka:
" Loop over table i_compc_all and assign current line to structure i_compc_all_line
LOOP AT i_compc_all INTO i_compc_all_line.
CASE i_compc_all_line-ftype. " Read column ftype from current line (which as assigned into i_compc_all_line)
WHEN 'B'. " Bill-to customer number transformation
i_compc_bil_line = i_compc_all_line. " Copy structure
APPEND i_compc_bil_line TO i_compc_bil. " Append structure to table
" more WHENs ...
ENDCASE.
ENDLOOP.
" Insert into table with Header:
INSERT TABLE i_sap_knb1. " insert into TABLE WITH HEADER: insert table header into it's content
insert i_sap_knb1_line into table i_sap_knb1. " insert into HASHED TABLE: insert structure i_sap_knb1_line into hashed table i_sap_knb1
APPEND p_t_errorlog_line to p_t_errorlog. " insert into STANDARD TABLE: insert structure / wa p_t_errorlog_line into table p_t_errorlog_line