SAP Tabella interna ABAP: crea, leggi, popola, copia ed elimina
โก Riepilogo intelligente
SAP Gli oggetti Tabella Interna ABAP contengono dati da una struttura fissa per un utilizzo dinamico all'interno di un programma. Questa pagina illustra le aree di lavoro, le righe di intestazione, i quattro metodi di creazione e le istruzioni per popolare, copiare, leggere ed eliminare le righe di una tabella.

Cos'รจ una tabella interna?
TAVOLO INTERNO vengono utilizzati per ottenere dati da una struttura fissa per l'uso dinamico in ABAP. Ogni riga nella tabella interna ha la stessa struttura di campo. L'utilizzo principale delle tabelle interne รจ per l'archiviazione e la formattazione dei dati da una tabella di database all'interno di un programma.
Un tavolo interno funziona sempre in sinergia con un'area di lavoro, quindi questo concetto verrร trattato in seguito.
Che cos'รจ un'area di lavoro?
Le aree di lavoro sono singole righe di dati. Devono avere lo stesso formato di qualsiasi tabella interna. Vengono utilizzate per elaborare i dati di una tabella interna una riga alla volta.
Qual รจ la differenza tra un tavolo interno e un'area di lavoro?
Una foto dice piรน di mille parole
Il diagramma mostra una tabella contenente numerose righe, mentre l'area di lavoro contiene solo la riga attualmente in fase di elaborazione. La creazione dell'area di lavoro, sia da parte del sistema che dello sviluppatore, dipende dal tipo di tabella descritto di seguito.
Tipi di tabelle interne
Esistono due tipi di tabelle interne.
- Tavoli interni con linea HEADER
- Tabelle interne senza riga HEADER.
Tabelle interne con riga di intestazione
- Qui il sistema crea automaticamente l'area di lavoro.
- L'area di lavoro ha lo stesso tipo di dati della tabella interna.
- Questa area di lavoro รจ chiamata riga HEADER.
- ร qui che vengono eseguite tutte le modifiche o qualsiasi azione sul contenuto della tabella. Di conseguenza, i record possono essere inseriti direttamente nella tabella o accessibili direttamente dalla tabella interna.
Tabelle interne senza riga di intestazione :
- Qui non รจ presente alcuna area di lavoro associata alla tabella.
- L'area di lavoro deve essere specificata esplicitamente quando dobbiamo accedere a tali tabelle.
- Pertanto non รจ possibile accedere direttamente a queste tabelle.
Suggerimento: Una tabella con riga di intestazione mantiene lo stesso nome sia per la tabella stessa che per la sua area di lavoro, il che rende il codice ambiguo. I nuovi programmi dovrebbero dichiarare una tabella senza riga di intestazione e specificare esplicitamente l'area di lavoro.
Tabelle interne standard, ordinate e con hashing
Oltre alla distinzione nella riga di intestazione, ogni tabella interna ha anche un tipo di tabella che determina come viene trovata una riga. Il tipo viene scelto tramite l'aggiunta TYPE STANDARD TABLE, TYPE SORTED TABLE o TYPE HASHED TABLE e ha un effetto diretto sull'esecuzione.
| Tipo di tavolo | Metodo di accesso | Le | qui utilizzati per |
|---|---|---|---|
| Standard | Indice e chiave, con ricerca lineare sulla chiave | Non unico | Elaborazione sequenziale e piccole tabelle lette con un indice |
| ordinato | Indice e chiave, con ricerca binaria sulla chiave | Unico o non unico, mantenuto ordinato automaticamente | Le tabelle piรน grandi leggono ripetutamente i campi chiave principali |
| hash | Solo chiave, con un algoritmo di hash | Unico | Tabelle molto grandi che vengono sempre lette tramite la chiave completa, come ad esempio un buffer di record di database. |
Una tabella standard รจ quella predefinita e si adatta all'elaborazione sequenziale. Una tabella hash mantiene costante il tempo di accesso indipendentemente dal numero di righe memorizzate, motivo per cui le regole di prestazione di Open SQL Lo consiglio per il buffering dei record.
Creazione di tabelle interne
Esistono molti modi per creare una tabella interna. Vediamoli uno per uno-
1.Utilizzando la dichiarazione Type
Creiamo ora una tabella interna itab utilizzando l'istruzione TYPE.
La sintassi รจ โ
Types : begin of line, column1 type I, column2 type I, end of line.
Esempio:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
L'istruzione TYPES crea una linea di struttura come definito.
Per creare effettivamente una tabella interna itab utilizzare il seguente comando:
Data itab type line occurs 10.
Viene creata una tabella interna itab con la struttura di line. Oltre a dichiarare la struttura di una tabella interna, la clausola OCCURS definisce anche quante voci della tabella vengono mantenute nella memoria principale (in questo caso 10). I record aggiuntivi vengono scritti nell'area di paginazione e possono influire sulle prestazioni
2. Facendo riferimento ad un'altra Tabella
ร possibile creare una tabella interna facendo riferimento a una tabella esistente. La tabella esistente potrebbe essere una tabella standard. SAP tavolo, un tavolo Z o un altro tavolo interno.
Sintassi-
Data <f> <type> [with header line].
Esempio-
DATA itab TYPE line OCCURS 10 with header line.
Qui viene creata una tabella interna itab del tipo riga con una riga di intestazione. Tieni presente che "con riga di intestazione" รจ facoltativo.
3. Facendo riferimento alla Struttura esistente
Sintassi-
Data <f> LIKE <struct> occurs n [with header line].
Esempio-
DATA itab LIKE sline OCCURS 10.
Qui viene creata una tabella itab avente una struttura identica a quella di sline
4.Creando una nuova struttura
Creiamo ora una tabella interna con una struttura tutta nostra. Qui la tabella viene creata con una riga di intestazione, per impostazione predefinita,.
Sintassi โ
Data : Begin of <f> occurs <n>, <component declaration>, ................................, End of <f>.
Esempio -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Viene creata la tabella interna itab
Una tabella vuota รจ di scarsa utilitร , quindi la sezione successiva la riempie di righe.
Popolamento di tabelle interne
Ora che abbiamo creato con successo alcune tabelle interne, vediamo come popolarle con alcuni record. Sono disponibili vari metodi per popolare le tabelle
1.Aggiungi dati riga per riga
Il primo metodo disponibile รจ l'utilizzo dell'istruzione APPEND.
Utilizzando l'istruzione APPEND possiamo aggiungere una riga da un'altra area di lavoro alla tabella interna oppure possiamo aggiungere una riga iniziale alla tabella interna.
Sintassi โ
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Qui l'area di lavoro oppure la riga iniziale viene aggiunta alla tabella interna .
La variabile di sistema SY-TABIX contiene l'indice della riga aggiunta.
Esempio:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Risultati: ' ' '0'
L'istruzione APPEND initial line aggiunge alla tabella una riga inizializzata con il valore corretto per il suo tipo. In questo caso, col1 รจ un carattere e col2 รจ un numero intero. L'istruzione APPEND initial line aggiunge quindi una riga inizializzata in base al tipo di dati delle colonne, ovvero uno spazio per col1 e 0 per col2.
2.Utilizzo dell'istruzione COLLECT
COLLECT รจ un'altra forma di istruzione utilizzata per popolare le tabelle interne. Generalmente COLLECT viene utilizzato durante l'inserimento di righe in una tabella interna con chiave standard univoca.
Sintassi-
COLLECT [<wa> INTO] <itable>.
In caso di tabelle con riga di intestazione, l'opzione INTO viene omessa. Supponiamo che ci sia giร una voce con una chiave uguale a quella che stai tentando di aggiungere, quindi non viene aggiunta una nuova riga alla tabella, ma vengono aggiunti i campi numerici di entrambe le voci ed รจ presente solo una voce corrispondente alla chiave . Il valore di SY-TABIX viene modificato nella riga della voce originale. Altrimenti COLLECT agisce in modo simile ad APPEND e SY-TABIX contiene l'indice della riga elaborata.
3. Utilizzo dell'istruzione INSERT
L'istruzione INSERT aggiunge un'area di riga/lavoro alla tabella interna. ร possibile specificare la posizione in cui deve essere aggiunta la nuova riga utilizzando la clausola INDEX con l'istruzione INSERT.
Sintassi
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Qui, l'area di lavoro o INIZIALE LINE viene inserito nella tabella interna all'indice .
Copia di tabelle interne
Il contenuto di una tabella interna puรฒ essere copiato in un'altra utilizzando APPEND LINES o INSERISCI LINEIstruzione S. Un modo piรน semplice รจ utilizzare una delle seguenti sintassi.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Questi copiano il contenuto di ITAB1 in ITAB2. In caso di tabelle interne con riga di intestazione dobbiamo utilizzare [] per distinguerle dall'area di lavoro. Quindi, per copiare il contenuto delle tabelle interne con la riga di intestazione la sintassi diventa,
itab1[] = itab2[].
Leggi le tabelle interne
Ora che abbiamo familiarizzato con la creazione di tabelle interne e il loro popolamento con i dati, vedremo come utilizzare effettivamente i dati o come recuperarli dalle tabelle interne.
1. Utilizzo di Loop -Endloop
Uno dei modi per accedere o leggere la tabella interna รจ utilizzare LOOP-ENDLOOP.
Sintassi
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Qui quando dici LOOP AT ITABLE, la tabella interna ITABLE viene letta riga per riga. ร possibile accedere ai valori delle colonne per quella riga durante qualsiasi parte della struttura LOOP-ENDLOOP. Il valore di SY-SUBRC รจ impostato su 0, anche se viene letto un solo record.
2. Utilizzando LEGGI
L'altro metodo per leggere la tabella interna consiste nell'utilizzare l'istruzione READ.
Sintassi-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Questa istruzione legge la riga corrente o la riga specificata dall'indice Il valore di SY-TABIX รจ l'indice della riga letta. Se viene trovata una voce con l'indice specificato, SY-SUBRC viene impostato a 0. Se l'indice specificato รจ inferiore a 0, si verifica un errore di runtime. Se l'indice specificato supera la dimensione della tabella, SY-SUBRC viene impostato a 4.
โ ๏ธ Attenzione: L'istruzione READ TABLE โฆ INDEX 0 genera un errore di runtime, pertanto รจ necessario verificare l'indice calcolato in fase di runtime prima dell'esecuzione dell'istruzione.
Eliminazione di tabelle interne
Esistono molti modi per eliminare righe da una tabella interna.
1.Eliminazione di righe in un ciclo.
Questo รจ il modo piรน semplice per eliminare le righe.
Sintassi
DELETE <ITABLE>.
Questa istruzione funziona solo all'interno di un ciclo. Cancella la riga corrente. ร possibile eliminare le righe in un ciclo in modo condizionale aggiungendo il file Dove la clausola.
2.Eliminazione di righe utilizzando l'indice.
Viene utilizzato per eliminare una riga dalla tabella interna in qualsiasi indice conosciuto.
Sintassi
DELETE <ITABLE> INDEX <IDX>.
La linea con l'indice viene eliminato. L'indice della riga seguente viene decrementato di 1.
3. Eliminazione delle righe duplicate.
Le righe duplicate vengono rimosse dopo che la tabella รจ stata ordinata in base ai campi chiave.
SORT itab BY col1. DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
Vengono confrontate solo le righe adiacenti, motivo per cui l'istruzione SORT deve essere eseguita per prima. Per svuotare completamente la tabella, utilizzare CLEAR itab[] o REFRESH itab.

