Когда мы читаем запись из внутренней таблицы со строкой заголовка, эта запись перемещается из самой таблицы в строку заголовка. Тогда это строка заголовка, с которой работает наша программа. То же самое относится и к созданию новой записи. Это строка заголовка, с которой вы работаете, и из которой новая запись отправляется в тело таблицы.
Чтобы скопировать записи, мы можем использовать оператор SELECT, чтобы выбрать все записи из таблицы, а затем использовать оператор MOVE, который переместит записи из исходной таблицы в новую внутреннюю таблицу в поля, где имена соответствуют.
Ниже приведен синтаксис для оператора MOVE —
MOVE <table_field> TO <internal_tab_field>.
пример
REPORT ZCUSLIST1. TABLES: ZCUSTOMERS1. DATA: BEGIN OF itab01 Occurs 0, name LIKE ZCUSTOMERS1-name, dob LIKE ZCUSTOMERS1-dob, END OF itab01. Select * FROM ZCUSTOMERS1. MOVE ZCUSTOMERS1-name TO itab01-name. MOVE ZCUSTOMERS1-dob TO itab01-dob. ENDSELECT. Write: / itab01-name, itab01-dob.
Приведенный выше код производит следующий вывод —
MARGARET 02.11.1994
Цикл выбора заполняет каждое поле по одному, используя оператор MOVE для перемещения данных из одного поля таблицы в другое. В приведенном выше примере операторы MOVE использовались для перемещения содержимого таблицы ZCUSTOMERS1 в соответствующие поля внутренней таблицы. Вы можете выполнить это действие только с одной строкой кода. Вы можете использовать оператор MOVECORRESPONDING.
Ниже приведен синтаксис оператора MOVE-CORRESPONDING:
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
Он сообщает системе переместить данные из полей ZCUSTOMERS1 в соответствующие им поля в itab01.
пример
REPORT ZCUSTOMERLIST. TABLES: ZCUSTOMERS1. DATA: Begin of itab01 occurs 0, customer LIKE ZCUSTOMERS1-customer, name LIKE ZCUSTOMERS1-name, title LIKE ZCUSTOMERS1-title, dob LIKE ZCUSTOMERS1-dob, END OF itab01. SELECT * from ZCUSTOMERS1. MOVE-Corresponding ZCUSTOMERS1 TO itab01. APPEND itab01. ENDSELECT. LOOP AT itab01. Write: / itab01-name, itab01-dob. ENDLOOP.
Приведенный выше код производит следующий вывод —
MARK 21.05.1981 JAMES 14.08.1977 AURIELE 19.06.1990 STEPHEN 22.07.1985 MARGARET 02.11.1994
Это стало возможным благодаря тому, что оба имеют совпадающие имена полей. При использовании этого оператора необходимо убедиться, что оба поля имеют совпадающие типы данных и длины. Это было сделано здесь с заявлением LIKE ранее.