SAP ABAP - Copia di tabelle interne
Quando leggiamo un record da una tabella interna con una riga di intestazione, quel record viene spostato dalla tabella stessa nella riga di intestazione. È quindi la riga di intestazione con cui lavora il nostro programma. Lo stesso vale durante la creazione di un nuovo record. È la riga di intestazione con la quale si lavora e da cui viene inviato il nuovo record al corpo della tabella stesso.
Per copiare i record, possiamo utilizzare un'istruzione SELECT per selezionare tutti i record dalla tabella e quindi utilizzare l'istruzione MOVE che sposterà i record dalla tabella originale nella nuova tabella interna nei campi in cui corrispondono i nomi.
Di seguito è riportata la sintassi per l'istruzione MOVE:
MOVE <table_field> TO <internal_tab_field>.
Esempio
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.
Il codice precedente produce il seguente output:
MARGARET 02.11.1994
Il ciclo di selezione riempie ogni campo uno alla volta, utilizzando l'istruzione MOVE per spostare i dati da un campo di tabella all'altro. Nell'esempio precedente, le istruzioni MOVE sono state utilizzate per spostare il contenuto della tabella ZCUSTOMERS1 nei campi corrispondenti nella tabella interna. È possibile eseguire questa azione con una sola riga di codice. È possibile utilizzare l'istruzione MOVECORRESPONDING.
Di seguito è riportata la sintassi per l'istruzione MOVE-CORRESPONDING:
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
Indica al sistema di spostare i dati dai campi di ZCUSTOMERS1 ai campi corrispondenti in itab01.
Esempio
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.
Il codice precedente produce il seguente output:
MARK 21.05.1981
JAMES 14.08.1977
AURIELE 19.06.1990
STEPHEN 22.07.1985
MARGARET 02.11.1994
Ciò è reso possibile dal fatto che entrambi hanno nomi di campo corrispondenti. Quando si utilizza questa istruzione, è necessario assicurarsi che entrambi i campi abbiano tipi di dati e lunghezze corrispondenti. È stato fatto qui con l'istruzione LIKE in precedenza.