ABAP
Interna tabeller
Sök…
Typer av interna tabeller
DATA: <TABLE NAME> TYPE <SORTED|STANDARD|HASHED> TABLE OF <TYPE NAME>
WITH <UNIQUE|NON-UNIQUE> KEY <FIELDS FOR KEY>.
Standardtabell
Den här tabellen har alla poster lagrade på ett linjärt sätt och man kan komma åt poster på ett linjärt sätt. För stora bordstorlekar kan tabellåtkomst vara långsam.
Sorterad tabell
Kräver tillägg WITH UNIQUE | NON-UNIQUE KEY . Sökningen sker snabbt på grund av en binär sökning. Det går inte att lägga till poster i den här tabellen eftersom det kan bryta sorteringsordningen, så de införs alltid med INSERT nyckelordet.
Hashed tabell
Kräver tillägg WITH UNIQUE | NON-UNIQUE KEY . Använder en egen hashningsalgoritm för att upprätthålla nyckelvärdespar. Teoretiskt kan sökningar vara så långsamma som STANDARD tabellen, men praktiskt taget är de snabbare än ett SORTED bord som tar en konstant tid oavsett tabellens storlek.
Förklaring av ABAP: s interna tabeller
Intern tabelldeklaration baserad på lokal typdefinition
" 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.
Förklaring baserad på databastabellen
DATA t_flightb TYPE STANDARD TABLE OF flightb.
Inline Internt deklaration
Kräver ABAP-version> 7.4
TYPES t_itab TYPE STANDARD TABLE OF i WITH EMPTY KEY.
DATA(t_inline) = VALUE t_itab( ( 1 ) ( 2 ) ( 3 ) ).
Internt tabell med sidledningsdeklaration
I ABAP finns tabeller med rubrikrader och tabeller utan rubrikrader. Tabeller med rubrikrader är ett äldre koncept och bör inte användas i ny utveckling.
Interntabell: Standardtabell med / utan rubrikrad
Denna kod deklarerar tabellen i_compc_all med den befintliga strukturen för 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.
Internt tabell: Hashtabell med / utan rubrikrad
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
Förklaring av ett arbetsområde för tabeller utan rubrik
Ett arbetsområde (vanligtvis förkortat wa ) har exakt samma struktur som tabellen, men kan endast innehålla en rad (en WA är en struktur i ett bord med endast en dimension).
DATA: i_compc_all_line LIKE LINE OF i_compc_all.
Läs, skriva och infoga i interna tabeller
Läs, skriva och infoga i interna tabeller med en rubrikrad:
" 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.
Påminnelse: Interna tabeller med rubrikrader är förbjudna i objektorienterade sammanhang. Användning av interna tabeller utan rubrikrader rekommenderas alltid.
Läs, skriva och infoga i interna tabeller utan rubrikrad:
" 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