ABAP
Внутренние таблицы
Поиск…
Типы внутренних таблиц
DATA: <TABLE NAME> TYPE <SORTED|STANDARD|HASHED> TABLE OF <TYPE NAME>
WITH <UNIQUE|NON-UNIQUE> KEY <FIELDS FOR KEY>.
Стандартная таблица
В этой таблице есть все записи, хранящиеся в линейном режиме, и записи доступны линейным способом. Для больших размеров таблиц доступ к таблице может быть медленным.
Сортированная таблица
Требуется дополнение WITH UNIQUE | NON-UNIQUE KEY . Поиск выполняется быстро из-за выполнения двоичного поиска. Записи не могут быть добавлены в эту таблицу, так как они могут нарушить порядок сортировки, поэтому они всегда вставляются с использованием ключевого слова INSERT .
Хешированный стол
Требуется дополнение WITH UNIQUE | NON-UNIQUE KEY . Использует собственный алгоритм хеширования для поддержки пар ключ-значение. Теоретические поиски могут быть такими же медленными, как и таблица STANDARD но практически они быстрее, чем таблица SORTED занимающая постоянное количество времени, независимо от размера таблицы.
Декларация внутренних таблиц ABAP
Внутренняя декларация таблицы на основе определения локального типа
" 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.
Декларация на основе таблицы базы данных
DATA t_flightb TYPE STANDARD TABLE OF flightb.
Внутренняя декларация внутренней таблицы
Требуется версия ABAP> 7.4
TYPES t_itab TYPE STANDARD TABLE OF i WITH EMPTY KEY.
DATA(t_inline) = VALUE t_itab( ( 1 ) ( 2 ) ( 3 ) ).
Внутренняя таблица с объявлением строк заголовка
В ABAP есть таблицы со строками заголовков и таблицы без строк заголовка. Таблицы с заголовками являются более старой концепцией и не должны использоваться в новой разработке.
Внутренняя таблица: стандартная таблица с / без строки заголовка
Этот код объявляет таблицу i_compc_all существующей структурой 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.
Внутренняя таблица: Хешированная таблица с / без строки заголовка
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
Объявление рабочей области для таблиц без заголовка
Рабочая область (обычно сокращенно wa ) имеет ту же структуру, что и таблица, но может содержать только одну строку (WA - это структура таблицы только с одним измерением).
DATA: i_compc_all_line LIKE LINE OF i_compc_all.
Чтение, запись и ввод во внутренние таблицы
Чтение, запись и вставка во внутренние таблицы с помощью строки заголовка:
" 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.
Напоминание. Внутренние таблицы с заголовками запрещены в объектно-ориентированных контекстах. Рекомендуется всегда использовать внутренние таблицы без строк заголовка.
Чтение, запись и вставка во внутренние таблицы без строки заголовка:
" 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