SAP Внутренняя таблица ABAP: создание, чтение, заполнение, копирование и удаление
⚡ Умное резюме
SAP Внутренние табличные объекты ABAP хранят данные из фиксированной структуры для динамического использования внутри программы. На этой странице объясняются рабочие области, строки заголовка, четыре метода создания, а также операторы, которые заполняют, копируют, читают и удаляют строки таблицы.
Что такое внутренняя таблица?
ВНУТРЕННЯЯ ТАБЛИЦА используются для получения данных из фиксированной структуры для динамического использования в ABAP. Каждая строка внутренней таблицы имеет одинаковую структуру полей. Основное использование внутренних таблиц — хранение и форматирование данных из таблицы базы данных внутри программы.
Внутренний стол всегда работает в сочетании с рабочей зоной, поэтому эта концепция является следующей.
Что такое рабочая зона?
Рабочие области представляют собой отдельные строки данных. Они должны иметь тот же формат, что и любые внутренние таблицы. Они используются для обработки данных во внутренней таблице построчно.
В чем разница между внутренним столом и рабочей зоной?
Картинка говорит тысячу слов
На диаграмме показана таблица, содержащая множество строк, в то время как рабочая область содержит только строку, которая в данный момент обрабатывается. Создается ли эта рабочая область системой или разработчиком, зависит от типа таблицы, описанного ниже.
Типы внутренних таблиц
Существует два типа внутренних таблиц.
- Внутренние таблицы со строкой HEADER
- Внутренние таблицы без строки HEADER.
Внутренние таблицы со строкой заголовка
- Здесь система автоматически создает рабочую область.
- Рабочая область имеет тот же тип данных, что и внутренняя таблица.
- Эта рабочая область называется строкой ЗАГОЛОВКА.
- Именно здесь выполняются все изменения или любые действия над содержимым таблицы. В результате записи можно напрямую вставлять в таблицу или обращаться к ней напрямую из внутренней таблицы.
Внутренние таблицы без строки заголовка :
- Здесь нет рабочей области, связанной со столом.
- Рабочая область должна быть явно указана, когда нам нужно получить доступ к таким таблицам.
- Следовательно, к этим таблицам нельзя получить прямой доступ.
💡 Совет: Таблица с заголовком имеет то же имя, что и сама таблица, и её рабочая область, что делает код неоднозначным. В новых программах следует объявлять таблицу без заголовка и явно указывать рабочую область.
Стандартные, отсортированные и хешированные внутренние таблицы
Помимо различия в заголовке, каждая внутренняя таблица также имеет тип, определяющий способ поиска строки. Тип выбирается с помощью добавления TYPE STANDARD TABLE, TYPE SORTED TABLE или TYPE HASHED TABLE и напрямую влияет на выполнение программы.
| Тип таблицы | Метод доступа | Основные | Лучше всего подходит для |
|---|---|---|---|
| Стандарт | Индекс и ключ с линейным поиском по ключу. | Неуникальный | Последовательная обработка и чтение небольших таблиц с помощью индекса. |
| отсортированный | Индекс и ключ с бинарным поиском по ключу. | Уникальные или неуникальные, сортировка осуществляется автоматически. | В больших таблицах многократно считываются основные ключевые поля. |
| Хэшировано | Только ключ, с алгоритмом хеширования. | Уникальное Произведение | Очень большие таблицы, которые всегда считываются по полному ключу, например, буфер записей базы данных. |
Стандартная таблица является таблицей по умолчанию и подходит для последовательной обработки. Хэшированная таблица поддерживает постоянное время доступа независимо от количества хранимых строк, поэтому правила производительности... Открытый SQL Рекомендую для буферизации записей.
Создание внутренних таблиц
Существует множество способов создания внутренней таблицы. Давайте посмотрим на них один за другим-
1. С помощью оператора типа
Теперь давайте создадим внутреннюю таблицу itab, используя оператор TYPE.
Синтаксис -
Types : begin of line, column1 type I, column2 type I, end of line.
Пример:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Оператор TYPES создает структурную строку, как определено.
Чтобы создать вкладку «Внутренняя таблица», используйте следующую команду:
Data itab type line occurs 10.
Itab внутренней таблицы создается со структурой line. Помимо объявления структуры внутренней таблицы, предложение OCCURS также определяет, сколько записей таблицы хранится в основной памяти (в данном случае 10). Дополнительные записи записываются в область подкачки и могут повлиять на производительность.
2. Ссылаясь на другую таблицу
Внутреннюю таблицу можно создать, сославшись на существующую. Существующая таблица может быть стандартной. SAP таблица, таблица Z или другая внутренняя таблица.
Синтаксис-
Data <f> <type> [with header line].
Пример-
DATA itab TYPE line OCCURS 10 with header line.
Здесь создается внутренняя таблица itab типа строка со строкой заголовка. Обратите внимание: «со строкой заголовка» не является обязательным.
3.Ссылаясь на существующую структуру
Синтаксис-
Data <f> LIKE <struct> occurs n [with header line].
Пример-
DATA itab LIKE sline OCCURS 10.
Здесь создается таблица itab, имеющая структуру, аналогичную структуре таблицы sline.
4. Путем создания новой структуры
Давайте теперь создадим внутреннюю таблицу с собственной структурой. Здесь таблица создается со строкой заголовка, по умолчанию.
Синтаксис -
Data : Begin of <f> occurs <n>, <component declaration>, ................................, End of <f>.
Пример -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Создана внутренняя таблица itab.
Пустая таблица малополезна, поэтому в следующем разделе она заполняется строками.
Заполнение внутренних таблиц
Теперь, когда мы успешно создали несколько внутренних таблиц, давайте посмотрим, как заполнить их некоторыми записями. Существуют различные методы заполнения таблиц.
1.Добавьте данные построчно.
Первый доступный метод — использование оператора APPEND.
Используя оператор APPEND, мы можем либо добавить одну строку из другой рабочей области во внутреннюю таблицу, либо добавить одну начальную строку во внутреннюю таблицу.
Синтаксис -
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Здесь рабочая зона или начальная строка добавляется во внутреннюю таблицу .
Системная переменная SY-TABIX содержит индекс добавляемой строки.
Пример:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Результаты: ' ' '0'
Команда `Initial lines` добавляет в таблицу строку, инициализированную правильным значением для своего типа. Здесь `col1` — символьный столбец, а `col2` — целое число. Затем команда `APPEND initial line` добавляет строку, инициализированную в соответствии с типом данных столбцов, то есть пробел для `col1` и 0 для `col2`.
2. Использование оператора COLLECT.
COLLECT — это еще одна форма оператора, используемая для заполнения внутренних таблиц. Обычно COLLECT используется при вставке строк во внутреннюю таблицу с уникальным стандартным ключом.
Синтаксис-
COLLECT [<wa> INTO] <itable>.
В случае таблиц со строкой заголовка опция INTO опускается. Предположим, что уже существует запись, имеющая тот же ключ, что и тот, который вы пытаетесь добавить, тогда в таблицу не добавляется новая строка, но добавляются числовые поля обеих записей и присутствует только одна запись, соответствующая ключу. . Значение SY-TABIX заменяется на строку исходной записи. В противном случае COLLECT действует аналогично APPEND, а SY-TABIX содержит индекс обработанной строки.
3. Использование оператора INSERT
Инструкция INSERT добавляет строку/рабочую область во внутреннюю таблицу. Вы можете указать позицию, в которую должна быть добавлена новая строка, используя предложение INDEX с оператором INSERT.
Синтаксис
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Здесь находится рабочая зона. или ИНИЦИАЛ LINE вставляется во внутреннюю таблицу по индексу .
Копирование внутренних таблиц
Содержимое одной внутренней таблицы можно скопировать в другую с помощью команды APPEND. LINES или ВСТАВИТЬ LINEОператор S. Более простой способ — использовать любой из следующих синтаксисов.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Они копируют содержимое ITAB1 в ITAB2. В случае внутренних таблиц со строкой заголовка мы должны использовать [], чтобы отличить их от рабочей области. Итак, чтобы скопировать содержимое внутренних таблиц со строкой заголовка, синтаксис будет следующим:
itab1[] = itab2[].
Чтение внутренних таблиц
Теперь мы знакомы с созданием внутренних таблиц и их заполнением данными. Рассмотрим, как фактически использовать эти данные или извлекать их из внутренних таблиц.
1. Использование цикла-Endloop
Одним из способов доступа к внутренней таблице или чтения ее является использование LOOP-ENDLOOP.
Синтаксис
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Вот когда вы говорите LOOP AT ITABLE, то внутренняя таблица ITABLE читается построчно. Вы можете получить доступ к значениям столбцов этой строки в любой части структуры LOOP-ENDLOOP. Значение SY-SUBRC установлено на 0, даже если читается только одна запись.
2. Использование ЧТЕНИЯ
Другой метод чтения внутренней таблицы — использование оператора READ.
Синтаксис-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Данное выражение считывает текущую строку или строку, указанную индексом. Значение SY-TABIX — это индекс считываемой строки. Если найдена запись с указанным индексом, то SY-SUBRC устанавливается в 0. Если указанный индекс меньше 0, возникает ошибка выполнения. Если указанный индекс превышает размер таблицы, то SY-SUBRC устанавливается в 4.
⚠️ Предупреждение: Оператор READ TABLE … INDEX 0 вызывает ошибку во время выполнения, поэтому перед его выполнением следует проверить индекс, вычисленный во время выполнения.
Удаление внутренних таблиц
Существует множество способов удаления строк из внутренней таблицы.
1.Удаление строк в цикле.
Это самый простой способ удаления строк.
Синтаксис
DELETE <ITABLE>.
Этот оператор работает только внутри цикла. Удаляет текущую строку. Вы можете удалить строки в цикле условно, добавив Предложение WHERE.
2.Удаление строк по индексу.
Используется для удаления строки из внутренней таблицы по любому известному индексу.
Синтаксис
DELETE <ITABLE> INDEX <IDX>.
Строка с индексом удаляется. Индекс следующей строки уменьшается на 1.
3. Удаление повторяющихся строк.
Повторяющиеся строки удаляются после сортировки таблицы по ключевым полям.
SORT itab BY col1. DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
Сравниваются только смежные строки, поэтому сначала необходимо выполнить оператор SORT. Чтобы полностью очистить таблицу, используйте CLEAR itab[] или REFRESH itab.


