SAP Εσωτερικός πίνακας ABAP: Δημιουργία, ανάγνωση, συμπλήρωση, αντιγραφή και διαγραφή

⚡ Έξυπνη Σύνοψη

SAP Τα αντικείμενα εσωτερικού πίνακα ABAP διατηρούν δεδομένα από μια σταθερή δομή για δυναμική χρήση μέσα σε ένα πρόγραμμα. Αυτή η σελίδα εξηγεί τις περιοχές εργασίας, τις γραμμές κεφαλίδας, τις τέσσερις μεθόδους δημιουργίας και τις εντολές που συμπληρώνουν, αντιγράφουν, διαβάζουν και διαγράφουν γραμμές πίνακα.

  • 📋 Βασικός Ορισμός: Ένας εσωτερικός πίνακας αποθηκεύει γραμμές πανομοιότυπης δομής στην κύρια μνήμη, τις περισσότερες φορές για να μορφοποιήσει δεδομένα που διαβάζονται από έναν πίνακα βάσης δεδομένων.
  • 🧾 Ρόλος στον Χώρο Εργασίας: Μια περιοχή εργασίας είναι μια μεμονωμένη γραμμή με την ίδια μορφή με τον πίνακα και επεξεργάζεται τον πίνακα μία γραμμή τη φορά.
  • 🏷️ Γραμμή κεφαλίδας: Ένας πίνακας με γραμμή κεφαλίδας λαμβάνει μια έμμεση περιοχή εργασίας, επομένως οι γραμμές μπορούν να εισαχθούν ή να διαβαστούν απευθείας χωρίς να ονομαστεί μία.
  • Τέσσερις μέθοδοι δημιουργίας: Δήλωση TYPES, αναφορά σε υπάρχοντα πίνακα, αναφορά σε υπάρχουσα δομή ή νέα δομή που δηλώνεται με OCCURS.
  • Κατοικώ: Η συνάρτηση APPEND προσθέτει μία γραμμή, η συνάρτηση COLLECT συγκεντρώνει τα αριθμητικά πεδία για ένα διπλότυπο κλειδί και η συνάρτηση INSERT τοποθετεί μια γραμμή σε ένα επιλεγμένο ευρετήριο.
  • 🔍 Διαβάστε και αντιγράψτε: Η συνάρτηση LOOP AT διαβάζει κάθε γραμμή, η συνάρτηση READ TABLE διαβάζει μία γραμμή ανά ευρετήριο και η συνάρτηση MOVE ή το σύμβολο ισότητας αντιγράφει έναν ολόκληρο πίνακα.
  • 🗑️ Διαγράφω: Η εντολή DELETE μέσα σε έναν βρόχο καταργεί την τρέχουσα γραμμή και η εντολή DELETE … INDEX καταργεί τη γραμμή σε μια γνωστή θέση.

SAP Εσωτερικοί πίνακες ABAP

Τι είναι ένας εσωτερικός πίνακας;

ΕΣΩΤΕΡΙΚΟ ΤΡΑΠΕΖΙ χρησιμοποιούνται για τη λήψη δεδομένων από μια σταθερή δομή για δυναμική χρήση στο ABAP. Κάθε γραμμή στον εσωτερικό πίνακα έχει την ίδια δομή πεδίου. Η κύρια χρήση των εσωτερικών πινάκων είναι η αποθήκευση και η μορφοποίηση δεδομένων από έναν πίνακα βάσης δεδομένων μέσα σε ένα πρόγραμμα.

Ένα εσωτερικό τραπέζι λειτουργεί πάντα σε συνδυασμό με έναν χώρο εργασίας, επομένως αυτή η ιδέα έρχεται στη συνέχεια.

Τι είναι ένας Χώρος Εργασίας;

Οι περιοχές εργασίας είναι μεμονωμένες γραμμές δεδομένων. Θα πρέπει να έχουν την ίδια μορφή με οποιονδήποτε από τους εσωτερικούς πίνακες. Χρησιμοποιείται για την επεξεργασία των δεδομένων σε έναν εσωτερικό πίνακα, μία γραμμή τη φορά.

Διαφορά μεταξύ εσωτερικού τραπεζιού και χώρου εργασίας;

Μια εικόνα λέει χίλιες λέξεις

Διαφορά μεταξύ εσωτερικού πίνακα και περιοχής εργασίας

Το διάγραμμα δείχνει τον πίνακα που περιέχει πολλές γραμμές, ενώ η περιοχή εργασίας περιέχει μόνο τη γραμμή που βρίσκεται υπό επεξεργασία τη δεδομένη στιγμή. Το αν αυτή η περιοχή εργασίας δημιουργείται από το σύστημα ή από τον προγραμματιστή εξαρτάται από τον τύπο πίνακα που περιγράφεται παρακάτω.

Τύποι εσωτερικών πινάκων

Υπάρχουν δύο τύποι εσωτερικών τραπεζιών.

  1. Εσωτερικοί πίνακες με γραμμή HEADER
  2. Εσωτερικοί πίνακες χωρίς γραμμή HEADER.

Εσωτερικοί πίνακες με γραμμή κεφαλίδας

  • Εδώ το σύστημα δημιουργεί αυτόματα την περιοχή εργασίας.
  • Η περιοχή εργασίας έχει τον ίδιο τύπο δεδομένων με τον εσωτερικό πίνακα.
  • Αυτή η περιοχή εργασίας ονομάζεται γραμμή HEADER.
  • Εδώ γίνονται όλες οι αλλαγές ή οποιαδήποτε ενέργεια στα περιεχόμενα του πίνακα. Ως αποτέλεσμα αυτού, οι εγγραφές μπορούν να εισαχθούν απευθείας στον πίνακα ή να προσπελαστούν απευθείας από τον εσωτερικό πίνακα.

Εσωτερικοί πίνακες χωρίς γραμμή κεφαλίδας :

  • Εδώ δεν υπάρχει χώρος εργασίας που να σχετίζεται με τον πίνακα.
  • Η περιοχή εργασίας πρέπει να προσδιορίζεται ρητά όταν πρέπει να έχουμε πρόσβαση σε τέτοιους πίνακες.
  • Ως εκ τούτου, δεν είναι δυνατή η άμεση πρόσβαση σε αυτούς τους πίνακες.

💡 Συμβουλές: Ένας πίνακας με γραμμή κεφαλίδας φέρει το ίδιο όνομα για τον πίνακα και την περιοχή εργασίας του, γεγονός που καθιστά τον κώδικα ασαφή. Τα νέα προγράμματα θα πρέπει να δηλώνουν έναν πίνακα χωρίς γραμμή κεφαλίδας και να περνούν μια σαφή περιοχή εργασίας.

Τυπικοί, Ταξινομημένοι και Κατακερματισμένοι Εσωτερικοί Πίνακες

Εκτός από τη διάκριση γραμμής κεφαλίδας, κάθε εσωτερικός πίνακας έχει επίσης έναν τύπο πίνακα που αποφασίζει πώς θα βρεθεί μια γραμμή. Το είδος επιλέγεται με την πρόσθεση TYPE STANDARD TABLE, TYPE SORTED TABLE ή TYPE HASHED TABLE και έχει άμεση επίδραση στον χρόνο εκτέλεσης.

Είδος τραπεζιού Μέθοδος πρόσβασης Κλειδί καλύτερα χρησιμοποιείται για
Βασική Ευρετήριο και κλειδί, με γραμμική αναζήτηση στο κλειδί Μη μοναδικό Διαδοχική επεξεργασία και μικροί πίνακες που διαβάζονται με ευρετήριο
Ταξινόμηση Ευρετήριο και κλειδί, με δυαδική αναζήτηση στο κλειδί Μοναδικό ή μη μοναδικό, ταξινομείται αυτόματα Οι μεγαλύτεροι πίνακες διαβάζονται επανειλημμένα μέσω των βασικών πεδίων που βρίσκονται στην αρχή
Έχω χάσει Μόνο κλειδί, με αλγόριθμο κατακερματισμού Μοναδική Πολύ μεγάλοι πίνακες που διαβάζονται πάντα με το πλήρες κλειδί, όπως ένα buffer εγγραφών βάσης δεδομένων

Ένας τυπικός πίνακας είναι ο προεπιλεγμένος και ταιριάζει στη διαδοχική επεξεργασία. Ένας κατακερματισμένος πίνακας διατηρεί τον χρόνο πρόσβασης σταθερό ανεξάρτητα από το πόσες γραμμές είναι αποθηκευμένες, γι' αυτό και οι κανόνες απόδοσης του Ανοίξτε την SQL Το συνιστώ για την προσωρινή αποθήκευση εγγραφών.

Δημιουργία εσωτερικών πινάκων

Υπάρχουν πολλοί τρόποι για να δημιουργήσετε έναν εσωτερικό πίνακα. Ας τα δούμε ένα προς ένα...

1.Με τη χρήση της δήλωσης τύπου

Ας δημιουργήσουμε τώρα έναν εσωτερικό πίνακα itab χρησιμοποιώντας την πρόταση TYPE.

Η σύνταξη είναι -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Παράδειγμα:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

Η δήλωση TYPES δημιουργεί μια γραμμή δομής όπως ορίζεται.

Για να δημιουργήσετε πραγματικά έναν εσωτερικό πίνακα, χρησιμοποιήστε την ακόλουθη εντολή-

Data itab type line occurs 10.

Δημιουργείται μια καρτέλα εσωτερικού πίνακα με τη δομή της γραμμής. Εκτός από τη δήλωση της δομής ενός εσωτερικού πίνακα, η ρήτρα OCCURS ορίζει επίσης πόσες εγγραφές πίνακα διατηρούνται στην κύρια αποθήκευση (σε αυτήν την περίπτωση 10). Επιπλέον εγγραφές εγγράφονται στην περιοχή σελιδοποίησης και μπορούν να επηρεάσουν την απόδοση

2.Με αναφορά σε άλλο Πίνακα

Μπορείτε να δημιουργήσετε έναν εσωτερικό πίνακα ανατρέχοντας σε έναν υπάρχοντα πίνακα. Ο υπάρχοντας πίνακας θα μπορούσε να είναι ένας τυπικός SAP πίνακα, πίνακα Z ή άλλο εσωτερικό πίνακα.

Σύνταξη-

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

Παράδειγμα-

DATA itab TYPE line OCCURS 10 with header line.

Εδώ δημιουργείται μια εσωτερική καρτέλα πίνακα της γραμμής τύπου με μια γραμμή κεφαλίδας. Σημειώστε ότι το "με γραμμή κεφαλίδας" είναι προαιρετικό.

3.Με αναφορά στην υπάρχουσα Δομή

Σύνταξη-

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

Παράδειγμα-

DATA itab LIKE sline OCCURS 10.

Εδώ δημιουργείται ένας πίνακας itab που έχει την ίδια δομή με αυτή της γραμμής.

4.Με τη δημιουργία μιας νέας Δομής

Ας δημιουργήσουμε τώρα έναν εσωτερικό πίνακα με μια δική μας δομή. Εδώ ο πίνακας δημιουργείται με μια γραμμή κεφαλίδας, από προεπιλογή.

Σύνταξη –

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

<component declaration>,

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

End of <f>.

Παράδειγμα -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Δημιουργείται η καρτέλα εσωτερικού πίνακα

Ένας άδειος πίνακας δεν έχει μεγάλη χρησιμότητα, επομένως η επόμενη ενότητα τον γεμίζει με γραμμές.

Συμπλήρωση εσωτερικών πινάκων

Τώρα που δημιουργήσαμε με επιτυχία μερικούς εσωτερικούς πίνακες, ας δούμε πώς θα τους συμπληρώσουμε με κάποιες εγγραφές. Υπάρχουν διάφορες διαθέσιμες μέθοδοι για τη συμπλήρωση πινάκων

1.Προσθήκη Δεδομένων γραμμή προς γραμμή

Η πρώτη διαθέσιμη μέθοδος είναι η χρήση της δήλωσης APPEND.

Χρησιμοποιώντας την πρόταση APPEND μπορούμε είτε να προσθέσουμε μια γραμμή από μια άλλη περιοχή εργασίας στον εσωτερικό πίνακα είτε μπορούμε να προσθέσουμε μια αρχική γραμμή στον εσωτερικό πίνακα.

Σύνταξη –

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

Εδώ ο χώρος εργασίας ή η αρχική γραμμή προσαρτάται στον εσωτερικό πίνακα .

Η μεταβλητή συστήματος SY-TABIX περιέχει το ευρετήριο της συνημμένης γραμμής.

Παράδειγμα:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Αποτελέσματα : ' ' '0'

Η εντολή Initial lines προσθέτει στον πίνακα μια γραμμή που έχει αρχικοποιηθεί με τη σωστή τιμή για τον τύπο της. Εδώ, η στήλη1 είναι ένας χαρακτήρας και η στήλη2 είναι ένας ακέραιος αριθμός. Στη συνέχεια, η εντολή APPEND initial line προσθέτει μια γραμμή που έχει αρχικοποιηθεί ως προς τον τύπο δεδομένων των στηλών, δηλαδή χώρο για τη στήλη1 και 0 για τη στήλη2.

2.Χρήση της δήλωσης COLLECT

Το COLLECT είναι μια άλλη μορφή δήλωσης που χρησιμοποιείται για τη συμπλήρωση των εσωτερικών πινάκων. Γενικά το COLLECT χρησιμοποιείται κατά την εισαγωγή γραμμών σε έναν εσωτερικό πίνακα με μοναδικό τυπικό κλειδί.

Σύνταξη-

COLLECT [<wa> INTO] <itable>.

Στην περίπτωση των πινάκων με γραμμή κεφαλίδας, η επιλογή INTO παραλείπεται. Ας υποθέσουμε ότι υπάρχει ήδη μια καταχώρηση με κλειδί ίδιο με αυτό που προσπαθείτε να προσαρτήσετε, τότε δεν προστίθεται νέα γραμμή στον πίνακα, αλλά προστίθενται τα αριθμητικά πεδία και των δύο καταχωρήσεων και υπάρχει μόνο μία καταχώρηση που αντιστοιχεί στο κλειδί . Η τιμή του SY-TABIX αλλάζει στη σειρά της αρχικής καταχώρισης. Διαφορετικά το COLLECT ενεργεί παρόμοια με το APPEND και το SY-TABIX περιέχει το ευρετήριο της επεξεργασμένης γραμμής.

3. Χρήση της εντολής INSERT

Η δήλωση INSERT προσθέτει μια γραμμή/περιοχή εργασίας στον εσωτερικό πίνακα. Μπορείτε να καθορίσετε τη θέση στην οποία θα προστεθεί η νέα γραμμή χρησιμοποιώντας τον όρο INDEX με την πρόταση INSERT.

Σύνταξη

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

Εδώ, ο χώρος εργασίας ή ΑΡΧΙΚΟ LINE εισάγεται στον εσωτερικό πίνακα στο ευρετήριο .

Αντιγραφή εσωτερικών πινάκων

Τα περιεχόμενα ενός εσωτερικού πίνακα μπορούν να αντιγραφούν σε έναν άλλο χρησιμοποιώντας την εντολή APPEND. LINES ή ΕΙΣΑΓΩΓΗ LINEΔήλωση S. Ένας πιο απλός τρόπος είναι να χρησιμοποιήσετε οποιαδήποτε από τις ακόλουθες συντακτικές.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Αυτά αντιγράφουν τα περιεχόμενα του ITAB1 στο ITAB2. Στην περίπτωση εσωτερικών πινάκων με γραμμή κεφαλίδας πρέπει να χρησιμοποιήσουμε το [] για να διακρίνουμε από την περιοχή εργασίας. Έτσι, για να αντιγράψετε τα περιεχόμενα των εσωτερικών πινάκων με γραμμή κεφαλίδας, η σύνταξη γίνεται:

itab1[] = itab2[].

Διαβάστε τους εσωτερικούς πίνακες

Είμαστε πλέον εξοικειωμένοι με τη δημιουργία εσωτερικών πινάκων και τη συμπλήρωσή τους με δεδομένα. Θα δούμε τώρα πώς μπορούμε να χρησιμοποιήσουμε τα δεδομένα ή να ανακτήσουμε τα δεδομένα από τους εσωτερικούς πίνακες.

1. Χρήση Loop -Endloop

Ένας από τους τρόπους πρόσβασης ή ανάγνωσης του εσωτερικού πίνακα είναι η χρήση LOOP-ENDLOOP.

Σύνταξη

LOOP AT <itable> [INTO <wa>]

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

ENDLOOP.

Εδώ, όταν λέτε LOOP AT ITABLE, τότε ο εσωτερικός πίνακας ITABLE διαβάζεται γραμμή προς γραμμή. Μπορείτε να αποκτήσετε πρόσβαση στις τιμές των στηλών για αυτήν τη γραμμή κατά τη διάρκεια οποιουδήποτε τμήματος της δομής LOOP-ENDLOOP. Η τιμή του SY-SUBRC έχει οριστεί σε 0, ακόμα κι αν διαβάζεται μόνο μία εγγραφή.

2. Χρήση του READ

Η άλλη μέθοδος ανάγνωσης του εσωτερικού πίνακα είναι η χρήση της δήλωσης READ.

Σύνταξη-

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

Αυτή η εντολή διαβάζει την τρέχουσα γραμμή ή γραμμή όπως καθορίζεται από το index Η τιμή του SY-TABIX είναι ο δείκτης της γραμμής που διαβάζεται. Εάν βρεθεί μια καταχώρηση με τον καθορισμένο δείκτη, τότε το SY-SUBRC ορίζεται σε 0. Εάν ο καθορισμένος δείκτης είναι μικρότερος από 0, τότε παρουσιάζεται σφάλμα χρόνου εκτέλεσης. Εάν ο καθορισμένος δείκτης υπερβαίνει το μέγεθος του πίνακα, τότε το SY-SUBRC ορίζεται σε 4.

⚠️ Προειδοποίηση: ΑΝΑΓΝΩΣΗ ΠΙΝΑΚΑ … Το INDEX 0 εμφανίζει ένα σφάλμα χρόνου εκτέλεσης, επομένως ένας δείκτης που υπολογίζεται κατά τον χρόνο εκτέλεσης θα πρέπει να ελεγχθεί πριν από την εκτέλεση της εντολής.

Διαγραφή εσωτερικών πινάκων

Υπάρχουν πολλοί τρόποι διαγραφής γραμμών από έναν εσωτερικό πίνακα.

1.Διαγραφή γραμμών σε βρόχο.

Αυτός είναι ο απλούστερος τρόπος διαγραφής γραμμών.

Σύνταξη

DELETE <ITABLE>.

Αυτή η δήλωση λειτουργεί μόνο εντός βρόχου. Διαγράφει την τρέχουσα γραμμή. Μπορείτε να διαγράψετε τις γραμμές σε έναν βρόχο υπό όρους προσθέτοντας το ΟΤΙ ρήτρα.

2.Διαγραφή γραμμών χρησιμοποιώντας το ευρετήριο.

Αυτό χρησιμοποιείται για τη διαγραφή μιας γραμμής από τον εσωτερικό πίνακα σε οποιοδήποτε ευρετήριο γνώσης.

Σύνταξη

DELETE <ITABLE> INDEX <IDX>.

Η γραμμή με τον δείκτη διαγράφεται. Ο δείκτης της ακόλουθης γραμμής μειώνεται κατά 1.

3. Διαγραφή διπλότυπων γραμμών.

Οι διπλότυπες γραμμές καταργούνται αφού ο πίνακας ταξινομηθεί με βάση τα βασικά πεδία.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Συγκρίνονται μόνο γειτονικές γραμμές, γι' αυτό και η πρόταση SORT πρέπει να εκτελεστεί πρώτα. Για να αδειάσετε εντελώς τον πίνακα, χρησιμοποιήστε την εντολή CLEAR itab[] ή REFRESH itab.

Συχνές Ερωτήσεις

Η συνάρτηση CLEAR itab αδειάζει μόνο τη γραμμή κεφαλίδας και η συνάρτηση CLEAR itab[] αδειάζει το κυρίως σώμα. Η συνάρτηση REFRESH αδειάζει πάντα το κυρίως σώμα αλλά διατηρεί τη μνήμη δεσμευμένη. Η συνάρτηση FREE αδειάζει το κυρίως σώμα και απελευθερώνει και τη μνήμη.

Το SY-TABIX περιέχει τον αριθμό γραμμής του εσωτερικού πίνακα που βρίσκεται υπό επεξεργασία. Το SY-INDEX περιέχει τον αριθμό διέλευσης ενός βρόχου DO ή WHILE. Ένας κατακερματισμένος πίνακας αφήνει το SY-TABIX στο μηδέν, επειδή δεν έχει ευρετήριο.

Η LOOP AT itab Η αντιστοίχιση ενός συμβόλου πεδίου αποφεύγει την αντιγραφή κάθε γραμμής σε μια περιοχή εργασίας, επομένως εκτελείται πιο γρήγορα σε μεγάλους πίνακες και επιτρέπει την αλλαγή της γραμμής στη θέση της χωρίς εντολή MODIFY.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης στα εργαλεία ανάπτυξης ABAP ξαναγράφουν τις δηλώσεις OCCURS και γραμμής κεφαλίδας σε TYPE STANDARD TABLE OF με μια σαφή περιοχή εργασίας και επισημαίνουν τις δηλώσεις που διακόπτονται μόλις εξαφανιστεί η γραμμή κεφαλίδας.

Οι σύμβουλοι απόδοσης της τεχνητής νοημοσύνης ελέγχουν τον τρόπο συμπλήρωσης και ανάγνωσης ενός πίνακα και, στη συνέχεια, προτείνουν έναν ταξινομημένο ή κατακερματισμένο πίνακα όταν μια γραμμική αναζήτηση κυριαρχεί στον χρόνο εκτέλεσης. Η σύσταση επιβεβαιώνεται με ένα tracε σε συναλλαγή ΣΑΒ.

Συνοψίστε αυτήν την ανάρτηση με: