SAP ABAP - Eliminazione di tabelle interne

L'istruzione DELETE viene utilizzata per eliminare uno o più record da una tabella interna. I record di una tabella interna vengono eliminati specificando una chiave o una condizione della tabella oppure trovando voci duplicate. Se una tabella interna ha una chiave non univoca e contiene voci duplicate, la prima voce della tabella viene eliminata.

Di seguito è riportata la sintassi per utilizzare l'istruzione DELETE per eliminare un record o una riga da una tabella interna:

DELETE TABLE <internal_table> FROM <work_area_itab>.

Nella sintassi precedente, l'espressione <work_area_itab> è un'area di lavoro e dovrebbe essere compatibile con il tipo di tabella interna <internal_table>. L'operazione di cancellazione viene eseguita sulla base di una chiave di default che potrebbe essere prelevata dai componenti dell'area di lavoro.

È inoltre possibile specificare esplicitamente una chiave di tabella nell'istruzione DELETE TABLE utilizzando la sintassi seguente:

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

In questa sintassi, <F1>, <F2> .... <Fn> sono i campi di una tabella interna e <K1>, <K2> .... <Kn> sono i campi chiave della tabella. L'istruzione DELETE viene utilizzata per eliminare i record o le righe della tabella <internal_table> in base alle espressioni <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.

Note - Se i tipi di dati dei campi <F1>, <F2> .... <Fn> non sono compatibili con i campi chiave <K1>, <K2> ... <Kn>, il sistema SAP li converte automaticamente in il formato compatibile.

Esempio

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

Il codice precedente produce il seguente output:

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

In questo esempio, mytable ha due campi, ColP e ColQ. Inizialmente, mytable è popolato con otto righe, dove ColP contiene i valori 1, 2, 3, 4, 5, 6, 7 e 8. Il ColQ contiene i valori 5, 6, 7, 8, 9, 10, 11 e 12 perché i valori ColP vengono incrementati di 4 ogni volta.

L'istruzione DELETE viene utilizzata per eliminare le righe da mytable dove il valore del campo chiave ColP è 1 o 3. Dopo l'eliminazione, il campo ColP di mytable contiene i valori 2, 4, 5, 6, 7 e 8, come mostrato nell'output. Il campo ColQ contiene i valori 6, 8, 9, 10, 11 e 12.