SAP Tabel intern ABAP: Creați, citiți, completați, copiați și ștergeți

⚡ Rezumat inteligent

SAP Obiectele tabelului intern ABAP conțin date dintr-o structură fixă ​​pentru utilizare dinamică în cadrul unui program. Această pagină explică zonele de lucru, liniile de antet, cele patru metode de creare și instrucțiunile care populează, copiază, citesc și șterg rândurile tabelului.

  • 📋 Definiția de bază: Un tabel intern stochează rânduri cu structură identică în memoria principală, cel mai adesea pentru a formata datele citite dintr-un tabel al bazei de date.
  • 🧾 Rol în domeniul de lucru: O zonă de lucru este un singur rând cu același format ca și tabelul și procesează tabelul linie cu linie.
  • 🏷️ Linie de antet: Un tabel cu o linie de antet primește o zonă de lucru implicită, astfel încât rândurile pot fi inserate sau citite direct fără a denumi una.
  • 🛠️ Patru metode de creație: Instrucțiune TYPES, referință la un tabel existent, referință la o structură existentă sau o structură nouă declarată cu OCCURS.
  • ➕ Popula: APPEND adaugă un rând, COLLECT agregă câmpuri numerice pentru o cheie duplicată, iar INSERT plasează un rând la un index ales.
  • 🔍 Citire și copiere: LOOP AT citește fiecare rând, READ TABLE citește un rând după index, iar MOVE sau semnul egal copiază un întreg tabel.
  • 🗑️ Șterge: DELETE în interiorul unei BUCLE elimină rândul curent, iar DELETE … INDEX elimină rândul dintr-o poziție cunoscută.

SAP Tabele interne ABAP

Ce este un tabel intern?

MASA INTERNĂ sunt folosite pentru a obține date dintr-o structură fixă ​​pentru utilizare dinamică în ABAP. Fiecare linie din tabelul intern are aceeași structură de câmp. Utilizarea principală a tabelelor interne este pentru stocarea și formatarea datelor dintr-un tabel de bază de date în cadrul unui program.

O tabelă internă funcționează întotdeauna împreună cu o zonă de lucru, așa că acest concept vine în continuare.

Ce este o zonă de lucru?

Zonele de lucru sunt rânduri individuale de date. Acestea ar trebui să aibă același format ca oricare dintre tabelele interne. Sunt utilizate pentru a procesa datele dintr-un tabel intern câte o linie pe rând.

Diferența dintre o masă internă și o zonă de lucru?

O imagine spune cât o mie de cuvinte

Diferența dintre masa internă și o zonă de lucru

Diagrama arată tabelul care conține mai multe rânduri, în timp ce zona de lucru conține doar rândul care este procesat în prezent. Dacă zona de lucru este creată de sistem sau de dezvoltator depinde de tipul de tabel descris mai jos.

Tipuri de tabele interne

Există două tipuri de mese interne.

  1. Mese interioare cu linia HEADER
  2. Mese interioare fără linie HEADER.

Tabele interne cu linie de antet

  • Aici sistemul creează automat zona de lucru.
  • Zona de lucru are același tip de date ca tabelul intern.
  • Această zonă de lucru se numește linia HEADER.
  • Aici sunt efectuate toate modificările sau oricare dintre acțiunile asupra conținutului tabelului. Drept urmare, înregistrările pot fi introduse direct în tabel sau accesate direct din tabelul intern.

Tabele interne fără linie de antet :

  • Aici nu există nicio zonă de lucru asociată cu tabelul.
  • Zona de lucru trebuie specificată în mod explicit când trebuie să accesăm astfel de tabele.
  • Prin urmare, aceste tabele nu pot fi accesate direct.

💡 Sfat: Un tabel cu o linie de antet poartă același nume pentru tabel și zona sa de lucru, ceea ce face codul ambiguu. Programele noi ar trebui să declare un tabel fără o linie de antet și să transmită o zonă de lucru explicită.

Tabele interne standard, sortate și hash

Pe lângă distincția dintre linia de antet, fiecare tabel intern are și un tip de tabel care decide cum este găsit un rând. Tipul este ales prin adăugarea TYPE STANDARD TABLE, TYPE SORTED TABLE sau TYPE HASHED TABLE și are un efect direct asupra timpului de execuție.

Tipul de masă Metoda de acces Cheie Cel mai bine folosit pentru
Standard Index și cheie, cu o căutare liniară pe cheie Neunic Procesare secvențială și tabele mici citite cu un index
Sortare Index și cheie, cu o căutare binară pe cheie Unic sau neunic, sortat automat Tabelele mai mari citesc în mod repetat câmpurile cheie principale
hashed Doar cheie, cu un algoritm hash Unic Tabele foarte mari care sunt întotdeauna citite de cheia completă, cum ar fi un buffer de înregistrări din baza de date

Un tabel standard este implicit și se potrivește procesării secvențiale. Un tabel hash menține timpul de acces constant indiferent de câte rânduri sunt stocate, motiv pentru care regulile de performanță ale Deschideți SQL îl recomand pentru stocarea temporară a înregistrărilor.

Crearea tabelelor interne

Există multe modalități de a crea un tabel intern. Să le privim unul câte unul -

1. Prin utilizarea instrucțiunii de tip

Să creăm acum un tabel intern itab folosind instrucțiunea TYPE.

Sintaxa este -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Exemplu:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

Instrucțiunea TYPES creează o linie de structură așa cum a fost definită.

Pentru a crea de fapt un tabel intern itab, utilizați următoarea comandă-

Data itab type line occurs 10.

Un tabel intern itab este creat cu structura de linie. Pe lângă declararea structurii unui tabel intern, clauza OCCURS definește, de asemenea, câte intrări de tabel sunt menținute în stocarea principală (în acest caz 10). Înregistrările suplimentare sunt scrise în zona de paginare și pot afecta performanța

2. Prin referire la un alt Tabel

Puteți crea un tabel intern referindu-vă la un tabel existent. Tabelul existent ar putea fi un tabel standard SAP masă, o masă Z sau o altă masă internă.

Sintaxă-

Data <f> <type> [with header line].

Exemplu-

DATA itab TYPE line OCCURS 10 with header line.

Aici este creat un tabel intern itab cu linia de tip cu o linie de antet. Vă rugăm să rețineți că „cu linie de antet” este opțional.

3. Prin referire la Structura existentă

Sintaxă-

Data	<f> LIKE <struct> occurs n [with header line].

Exemplu-

DATA itab LIKE sline OCCURS 10.

Aici este creat un tabel itab având o structură identică cu cea a tabelului sline.

4. Prin crearea unei noi Structuri

Să creăm acum un tabel intern cu o structură proprie. Aici tabelul este creat cu o linie de antet, în mod implicit.

Sintaxă –

Data : Begin of <f> occurs <n>,

<component declaration>,

................................,

End of <f>.

Exemplu -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Tabelul intern itab este creat

Un tabel gol este de puțin folos, așa că următoarea secțiune îl umple cu rânduri.

Popularea tabelelor interne

Acum că am creat cu succes câteva tabele interne, să vedem cum le populăm cu unele înregistrări. Există diferite metode disponibile pentru a completa tabelele

1.Adăugați date linie cu linie

Prima metodă disponibilă este utilizarea instrucțiunii APPEND.

Folosind instrucțiunea APPEND putem fie adăuga o linie dintr-o altă zonă de lucru la tabelul intern, fie putem adăuga o linie inițială la tabelul intern.

Sintaxă –

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Aici zona de lucru sau linia inițială este atașată tabelului intern .

Variabila de sistem SY-TABIX conține indexul liniei atașate.

Exemplu:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Rezultate: ' ' '0'

Linia inițială adaugă în tabel o linie inițializată cu valoarea corectă pentru tipul său. Aici, col1 este un caracter, iar col2 este un număr întreg. Apoi, APPEND linie inițială adaugă o linie inițializată în funcție de tipul de date al coloanelor, adică spațiu pentru col1 și 0 pentru col2.

2.Utilizarea instrucțiunii COLLECT

COLLECT este o altă formă de instrucțiune folosită pentru popularea tabelelor interne. În general, COLLECT este utilizat în timp ce se inserează linii într-un tabel intern cu cheie standard unică.

Sintaxă-

COLLECT [<wa> INTO] <itable>.

În cazul tabelelor cu linie de antet, opțiunea INTO este omisă. Să presupunem că există deja o intrare care are o cheie identică cu cea pe care încercați să o adăugați, atunci o linie nouă nu este adăugată la tabel, dar câmpurile numerice ale ambelor intrări sunt adăugate și este prezentă o singură intrare corespunzătoare cheii . Valoarea SY-TABIX este schimbată în rândul intrării originale. Altfel, COLLECT acționează similar cu APPEND și SY-TABIX conține indexul liniei procesate.

3. Utilizarea instrucțiunii INSERT

Instrucțiunea INSERT adaugă o linie/zonă de lucru la tabelul intern. Puteți specifica poziția în care va fi adăugată noua linie folosind clauza INDEX cu instrucțiunea INSERT.

Sintaxă

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Aici, zona de lucru sau INITIALĂ LINE este introdus în tabelul intern la index .

Copierea tabelelor interne

Conținutul unui tabel intern poate fi copiat în altul utilizând comanda APPEND. LINES sau INSERT LINEInstrucțiunea S. O modalitate mai simplă este de a utiliza oricare dintre următoarele sintaxe.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Acestea copiază conținutul ITAB1 în ITAB2. În cazul tabelelor interne cu linie de antet, trebuie să folosim [] pentru a distinge de zona de lucru. Deci, pentru a copia conținutul tabelelor interne cu linia de antet, sintaxa devine,

itab1[] = itab2[].

Citiți tabelele interne

Acum suntem familiarizați cu crearea tabelelor interne și cu popularea acestora cu date. Vom vedea acum cum utilizăm datele sau cum le recuperăm din tabelele interne.

1. Folosind Loop -Endloop

Una dintre modalitățile de accesare sau citire a tabelului intern este utilizarea LOOP-ENDLOOP.

Sintaxă

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Aici când spui LOOP AT ITABLE, atunci tabelul intern ITABLE este citit rând cu rând. Puteți accesa valorile coloanelor pentru acea linie în orice parte a structurii LOOP-ENDLOOP. Valoarea SY-SUBRC este setată la 0, chiar dacă este citită o singură înregistrare.

2. Folosind READ

Cealaltă metodă de citire a tabelului intern este utilizarea instrucțiunii READ.

Sintaxă-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Această instrucțiune citește linia curentă sau linia așa cum este specificată de index Valoarea lui SY-TABIX este indexul liniei citite. Dacă se găsește o intrare cu indexul specificat, atunci SY-SUBRC este setat la 0. Dacă indexul specificat este mai mic decât 0, atunci apare o eroare de execuție. Dacă indexul specificat depășește dimensiunea tabelului, atunci SY-SUBRC este setat la 4.

⚠️ Atenție: CITIȚI TABELUL … INDEX 0 generează o eroare de execuție, deci un index calculat la momentul execuției ar trebui verificat înainte de rularea instrucțiunii.

Ștergerea tabelelor interne

Există multe modalități de ștergere a liniilor dintr-un tabel intern.

1.Ștergerea liniilor într-o buclă.

Acesta este cel mai simplu mod de ștergere a liniilor.

Sintaxă

DELETE <ITABLE>.

Această declarație funcționează numai într-o buclă. Acesta șterge linia curentă. Puteți șterge liniile într-o buclă condiționat, adăugând clauza WHERE.

2.Ștergerea liniilor folosind indexul.

Acesta este folosit pentru a șterge o linie din tabelul intern la orice index cunoscut.

Sintaxă

DELETE <ITABLE> INDEX <IDX>.

Linia cu indexul este șters. Indicele următoarei linii este decrementat cu 1.

3. Ștergerea liniilor duplicate.

Rândurile duplicate sunt eliminate după ce tabelul a fost sortat după câmpurile cheie.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Se compară doar rândurile adiacente, motiv pentru care instrucțiunea SORT trebuie executată mai întâi. Pentru a goli complet tabelul, utilizați CLEAR itab[] sau REFRESH itab.

Întrebări frecvente

CLEAR itab golește doar linia de antet, iar CLEAR itab[] golește corpul. REFRESH golește întotdeauna corpul, dar păstrează memoria rezervată. FREE golește corpul și eliberează și memoria.

SY-TABIX conține numărul rândului din tabelul intern procesat în prezent. SY-INDEX conține numărul de trecere al unei bucle DO sau WHILE. Un tabel hash lasă SY-TABIX la zero, deoarece nu are index.

BUCLATURA LA itab ASIGNAREA unui simbol de câmp evită copierea fiecărui rând într-o zonă de lucru, astfel încât rulează mai rapid pe tabele mari și permite modificarea rândului pe loc fără o instrucțiune MODIFY.

Da. Asistenții AI din instrumentele de dezvoltare ABAP rescriu declarațiile OCCURS și ale liniei de antet în TYPE STANDARD TABLE OF cu o zonă de lucru explicită și semnalează instrucțiunile care se întrerup odată ce linia de antet dispare.

Consultanții de performanță ai inteligenței artificiale inspectează modul în care un tabel este completat și citit, apoi recomandă un tabel sortat sau indexat atunci când o căutare liniară domină timpul de execuție. Recomandarea este confirmată cu un trace în tranzacția SAT.

Rezumați această postare cu: