SAP Εσωτερικός πίνακας ABAP: Δημιουργία, ανάγνωση, συμπλήρωση, αντιγραφή και διαγραφή
Τι είναι ένας εσωτερικός πίνακας;
ΕΣΩΤΕΡΙΚΟ ΤΡΑΠΕΖΙ χρησιμοποιούνται για τη λήψη δεδομένων από μια σταθερή δομή για δυναμική χρήση στο ABAP. Κάθε γραμμή στον εσωτερικό πίνακα έχει την ίδια δομή πεδίου. Η κύρια χρήση των εσωτερικών πινάκων είναι η αποθήκευση και η μορφοποίηση δεδομένων από έναν πίνακα βάσης δεδομένων μέσα σε ένα πρόγραμμα.
Τι είναι ο χώρος εργασίας;
Οι περιοχές εργασίας είναι μεμονωμένες σειρές δεδομένων. Θα πρέπει να έχουν την ίδια μορφή με οποιονδήποτε από τους εσωτερικούς πίνακες. Χρησιμοποιείται για την επεξεργασία των δεδομένων σε έναν εσωτερικό πίνακα μία γραμμή τη φορά.
Διαφορά μεταξύ εσωτερικού πίνακα και περιοχής εργασίας;
Μια εικόνα λέει χίλιες λέξεις
Τύποι εσωτερικών πινάκων
Υπάρχουν δύο τύποι εσωτερικών τραπεζιών.
- Εσωτερικοί πίνακες με γραμμή HEADER
- Εσωτερικοί πίνακες χωρίς γραμμή HEADER.
Εσωτερικοί πίνακες με γραμμή κεφαλίδας
- Εδώ το σύστημα δημιουργεί αυτόματα την περιοχή εργασίας.
- Η περιοχή εργασίας έχει τον ίδιο τύπο δεδομένων με τον εσωτερικό πίνακα.
- Αυτή η περιοχή εργασίας ονομάζεται γραμμή HEADER.
- Εδώ γίνονται όλες οι αλλαγές ή οποιαδήποτε ενέργεια στα περιεχόμενα του πίνακα. Ως αποτέλεσμα αυτού, οι εγγραφές μπορούν να εισαχθούν απευθείας στον πίνακα ή να προσπελαστούν απευθείας από τον εσωτερικό πίνακα.
Εσωτερικοί πίνακες χωρίς γραμμή κεφαλίδας :
- Εδώ δεν υπάρχει χώρος εργασίας που να σχετίζεται με τον πίνακα.
- Η περιοχή εργασίας πρέπει να προσδιορίζεται ρητά όταν πρέπει να έχουμε πρόσβαση σε τέτοιους πίνακες.
- Ως εκ τούτου, δεν είναι δυνατή η άμεση πρόσβαση σε αυτούς τους πίνακες.
Δημιουργία εσωτερικών πινάκων
Υπάρχουν πολλοί τρόποι για να δημιουργήσετε έναν εσωτερικό πίνακα. Ας τα δούμε ένα προς ένα...
1.Με τη χρήση της δήλωσης τύπου
Ας δημιουργήσουμε τώρα μια καρτέλα εσωτερικού πίνακα χρησιμοποιώντας το Δήλωση 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.
Εδώ δημιουργείται μια καρτέλα πίνακα με δομή ίδια με αυτή του sline
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'
Οι αρχικές γραμμές προσθέτουν μια γραμμή αρχικοποιημένη με τη σωστή τιμή για τον τύπο της στον πίνακα. Εδώ, το col1 είναι ένας χαρακτήρας και το col2 είναι ένας ακέραιος αριθμός. Στη συνέχεια APPEND αρχική γραμμή, προσθέτει μια γραμμή αρχικοποιημένη σε σχέση με τον τύπο δεδομένων των στηλών, δηλαδή χώρο για col1 και 0 για col2.
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>].
Εδώ, ο χώρος εργασίας ή η ΑΡΧΙΚΗ ΓΡΑΜΜΗ εισάγεται στον εσωτερικό πίνακα στο ευρετήριο .
Αντιγραφή εσωτερικών πινάκων
Τα περιεχόμενα ενός εσωτερικού πίνακα μπορούν να αντιγραφούν σε έναν άλλο χρησιμοποιώντας την πρόταση APPEND LINES ή INSERT LINES. Ένας πιο απλός τρόπος είναι να χρησιμοποιήσετε οποιαδήποτε από τις παρακάτω συντακτικές.
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>.
Αυτή η δήλωση διαβάζει την τρέχουσα γραμμή ή γραμμή όπως καθορίζεται από το ευρετήριο . Η τιμή του SY-TABIX είναι ο δείκτης της γραμμής που διαβάζεται. Εάν βρεθεί μια καταχώρηση με το καθορισμένο ευρετήριο, τότε το SY-SUBRC ορίζεται σε 0. Εάν ο καθορισμένος δείκτης είναι μικρότερος από 0, τότε παρουσιάζεται σφάλμα χρόνου εκτέλεσης. Εάν το καθορισμένο ευρετήριο υπερβαίνει το μέγεθος του πίνακα, τότε το SY-SUBRC ορίζεται σε 4.
Διαγραφή εσωτερικών πινάκων
Υπάρχουν πολλοί τρόποι διαγραφής γραμμών από έναν εσωτερικό πίνακα.
1.Διαγραφή γραμμών σε βρόχο.
Αυτός είναι ο απλούστερος τρόπος διαγραφής γραμμών.
Σύνταξη
DELETE <ITABLE>.
Αυτή η δήλωση λειτουργεί μόνο εντός βρόχου. Διαγράφει την τρέχουσα γραμμή. Μπορείτε να διαγράψετε τις γραμμές σε έναν βρόχο υπό όρους προσθέτοντας το ΟΤΙ ρήτρα.
2.Διαγραφή γραμμών χρησιμοποιώντας το ευρετήριο.
Αυτό χρησιμοποιείται για τη διαγραφή μιας γραμμής από τον εσωτερικό πίνακα σε οποιοδήποτε ευρετήριο γνώσης.
Σύνταξη
DELETE <ITABLE> INDEX <IDX>.
Η γραμμή με τον δείκτη διαγράφεται. Ο δείκτης της ακόλουθης γραμμής μειώνεται κατά 1.