Άνοιγμα SQL & Native SQL σε SAP ABAP
⚡ Έξυπνη Σύνοψη
Ανοίξτε SQL και Native SQL σε SAP Το ABAP περιγράφει τους δύο τρόπους με τους οποίους ένα πρόγραμμα ABAP φτάνει στη βάση δεδομένων. Το Open SQL λειτουργεί σε πίνακες λεξικών με τρόπο ανεξάρτητο από τη βάση δεδομένων, ενώ το Native SQL μεταδίδει εντολές συγκεκριμένες για τη βάση δεδομένων απευθείας στην πλατφόρμα.

Τι είναι η Open SQL και η Native SQL;
Ο στόχος αυτού του σεμιναρίου δεν είναι να σας διδάξει SQL ή έννοιες βάσεων δεδομένων, αλλά για να σας παρουσιάσουμε την ποικιλομορφία SQL στο ABAP
Στη γλώσσα προγραμματισμού ABAP/4, χρησιμοποιούνται δύο τύποι SQL.
- NATIVE SQL
- ΑΝΟΙΞΤΕ SQL.
Το Open SQL σάς επιτρέπει να έχετε πρόσβαση στους πίνακες βάσης δεδομένων που δηλώνονται στο λεξικό ABAP ανεξάρτητα από την πλατφόρμα βάσης δεδομένων που χρησιμοποιεί το σύστημα R/3.
Το Native SQL σάς επιτρέπει να χρησιμοποιείτε εντολές SQL για συγκεκριμένες βάσεις δεδομένων σε ένα πρόγραμμα ABAP/4. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε πίνακες βάσης δεδομένων που δεν διαχειρίζονται από το λεξικό ABAP, και επομένως να ενσωματώσετε δεδομένα που δεν αποτελούν μέρος του συστήματος R/3.
Το Open SQL αποτελείται από ένα σύνολο δηλώσεων ABAP που εκτελούν λειτουργίες στην κεντρική βάση δεδομένων στο σύστημα R/3. Τα αποτελέσματα των λειτουργιών και τυχόν μηνύματα σφάλματος είναι ανεξάρτητα από το σύστημα βάσης δεδομένων που χρησιμοποιείται. Το Open SQL παρέχει έτσι μια ενιαία σύνταξη και σημασιολογία για όλα τα συστήματα βάσης δεδομένων που υποστηρίζονται από SAP. Τα προγράμματα ABAP που χρησιμοποιούν μόνο εντολές Open SQL θα λειτουργούν σε οποιοδήποτε σύστημα R/3, ανεξάρτητα από το σύστημα βάσης δεδομένων που χρησιμοποιείται. Οι ανοιχτές δηλώσεις SQL μπορούν να λειτουργήσουν μόνο με πίνακες βάσης δεδομένων που έχουν δημιουργηθεί στο λεξικό ABAP.
Η Open SQL είναι η προεπιλεγμένη επιλογή σχεδόν σε κάθε πρόγραμμα, επομένως το σύνολο εντολών της καλύπτεται πρώτο.
Βασικές εντολές Open SQL
- SELECT
- ΕΝΘΕΤΟ
- ΕΚΣΥΓΧΡΟΝΊΖΩ
- ΤΡΟΠΟΠΟΙΩ
- ΔΙΑΓΡΑΦΗ
- ΑΝΟΙΓΜΑ ΔΡΟΜΕΑ, ΑΝΑΓΚΗ, ΚΛΕΙΣΙΜΟ ΔΕΡΜΟΤΗΡΑ
Παράδειγμα
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
Καταχωρίστε τη λίστα επιβατών για την πτήση 0400 της Lufthansa στις 28-02.1995:
Κάθε μία από αυτές τις εντολές αναφέρει το αποτέλεσμά της μέσω δύο πεδίων συστήματος, τα οποία περιγράφονται στη συνέχεια.
Άνοιγμα Επιστροφής SQL Codes
Όλες οι δηλώσεις Open SQL συμπληρώνουν τα ακόλουθα δύο πεδία συστήματος με κωδικούς επιστροφής.
| Πεδίο συστήματος | Νόημα |
|---|---|
| SY-SUBRC | Μετά από κάθε δήλωση Open SQL, το πεδίο συστήματος SY-SUBRC περιέχει την τιμή 0 εάν η λειτουργία ήταν επιτυχής, μια τιμή διαφορετική από 0, εάν όχι. |
| SY-DBCNT | Μετά από μια δήλωση Open SQL, το πεδίο συστήματος SY-DBCNT περιέχει τον αριθμό των γραμμών βάσης δεδομένων που υποβλήθηκαν σε επεξεργασία. |
💡 Συμβουλές: Να ελέγχετε πάντα το SY-SUBRC αμέσως μετά την εντολή. Μια μεταγενέστερη εντολή ABAP αντικαθιστά το πεδίο και το αρχικό αποτέλεσμα χάνεται.
Όταν ένας πίνακας βρίσκεται εκτός του λεξικού ABAP, το Open SQL δεν μπορεί να τον φτάσει και το Native SQL αναλαμβάνει τον έλεγχο.
Εγγενής SQL
Όπως αναφέρθηκε ήδη, το Native SQL σάς επιτρέπει να χρησιμοποιείτε εντολές SQL για συγκεκριμένες βάσεις δεδομένων σε ένα Πρόγραμμα ABAP.
Για να χρησιμοποιήσετε τη δήλωση Native SQL, πρέπει να τοποθετήσετε πριν από την πρόταση EXEC SQL και να την ακολουθήσετε με την πρόταση ENDEXEC.
Σύνταξη
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Δεν υπάρχει περίοδος μετά τις εγγενείς δηλώσεις SQL. Επιπλέον, η χρήση ανεστραμμένων κομμάτων (“) ή αστερίσκου (*) στην αρχή μιας γραμμής σε μια εγγενή πρόταση SQL δεν εισάγει ένα σχόλιο όπως θα συνέβαινε στην κανονική σύνταξη ABAP. Πρέπει να γνωρίζετε εάν τα ονόματα πινάκων και πεδίων κάνουν διάκριση πεζών-κεφαλαίων στην επιλογή σας βάσεις δεδομένων.
Στις εγγενείς δηλώσεις SQL, τα δεδομένα μεταφέρονται μεταξύ του πίνακα βάσης δεδομένων και του προγράμματος ABAP χρησιμοποιώντας μεταβλητές κεντρικού υπολογιστή. Αυτά δηλώνονται στο πρόγραμμα ABAP και προηγούνται στην εντολή Native SQL με άνω και κάτω τελεία (:). Μπορείτε να χρησιμοποιήσετε στοιχειώδεις δομές ως μεταβλητές κεντρικού υπολογιστή. Κατ' εξαίρεση, οι δομές σε μια ρήτρα INTO αντιμετωπίζονται σαν όλα τα πεδία τους να αναφέρονται ξεχωριστά.
Όπως και στην Open SQL, μετά την πρόταση ENDEXEC, το SY-DBCNT περιέχει τον αριθμό των γραμμών που υποβάλλονται σε επεξεργασία. Σχεδόν σε όλες τις περιπτώσεις, το SY-SUBRC περιέχει την τιμή 0 μετά την πρόταση ENDEXEC.
⚠️ Προειδοποίηση: Η εγγενής SQL παρακάμπτει το SAP buffer πίνακα και τον αυτόματο χειρισμό πελατών του Open SQL. Το πεδίο πελάτη πρέπει να παρέχεται από το πρόγραμμα και η πρόταση εκτελείται μόνο στην πλατφόρμα βάσης δεδομένων για την οποία γράφτηκε.
Ανοιχτή SQL έναντι εγγενούς SQL: Βασικές διαφορές
Και οι δύο διεπαφές φτάνουν στην ίδια βάση δεδομένων, ωστόσο διαφέρουν ως προς τη φορητότητα, την προσωρινή αποθήκευση και τα αντικείμενα που μπορούν να αντιμετωπίσουν. Ο παρακάτω πίνακας συνοψίζει τις πρακτικές διαφορές.
| Κριτήρια | Ανοίξτε την SQL | Εγγενής SQL |
|---|---|---|
| Πίνακες που απευθύνονται | Μόνο πίνακες που δηλώνονται στο λεξικό ABAP | Οποιοσδήποτε πίνακας της βάσης δεδομένων, συμπεριλαμβανομένων πινάκων εκτός του λεξικού |
| Φορητότητα | Εκτελείται σε κάθε βάση δεδομένων που υποστηρίζεται από SAP | Συνδεδεμένο με τη σύνταξη μιας πλατφόρμας βάσης δεδομένων |
| Σύνταξη | Δηλώσεις ABAP με περίοδο κλεισίματος | Εγγενείς δηλώσεις που περικλείονται σε EXEC SQL … ENDEXEC, χωρίς περίοδο κλεισίματος |
| Μεταφορά δεδομένων | Χώροι εργασίας και εσωτερικά τραπέζια μέσω INTO | Μεταβλητές κεντρικού υπολογιστή που προηγούνται από άνω και κάτω τελεία |
| Χειρισμός και προσωρινή αποθήκευση πελατών | Αυτόματη διαχείριση πελατών και αποθήκευση πίνακα στην ενδιάμεση μνήμη | Δεν υπάρχει αυτόματη διαχείριση πελατών και το SAP η προσωρινή μνήμη παρακάμπτεται |
| Τυπική χρήση | Καθημερινή πρόσβαση σε δεδομένα εφαρμογών R/3 | Ενσωμάτωση δεδομένων που δεν αποτελούν μέρος του συστήματος R/3 |
Επομένως, η Open SQL είναι η προεπιλεγμένη και οι παρακάτω κανόνες τη διατηρούν γρήγορη.
Άνοιγμα SQL – Κανόνες απόδοσης
Για να βελτιωθεί η απόδοση της SQL και στη συνέχεια του προγράμματος ABAP, θα πρέπει να τηρούνται οι ακόλουθοι κανόνες:
Διατηρήστε το σύνολο αποτελεσμάτων μικρό
- Χρησιμοποιώντας την ρήτρα όπου
- Εάν απαιτείται μόνο μία εγγραφή από τη βάση δεδομένων, χρησιμοποιήστε SELECT SINGLE όποτε είναι δυνατόν.
Ελαχιστοποιήστε το ποσό των δεδομένων που μεταφέρονται
- Περιορίστε τον αριθμό των γραμμών
- Εάν απαιτούνται μόνο ορισμένα πεδία από έναν πίνακα, χρησιμοποιήστε το SELECT ΣΕ… δήλωση
- Περιορισμός του αριθμού στηλών
- Χρησιμοποιήστε αθροιστικές συναρτήσεις
Ελαχιστοποιήστε τον αριθμό των μεταφορών δεδομένων
- Αποφύγετε τους ένθετους βρόχους επιλογής
- Μια εναλλακτική επιλογή είναι να χρησιμοποιήσετε την πρόταση SELECT .. FOR ALL ENTRIES. Αυτή η πρόταση μπορεί συχνά να είναι πολύ πιο αποτελεσματική από την εκτέλεση ενός μεγάλου αριθμού εντολών SELECT ή SELECT SINGLE κατά τη διάρκεια ενός LOOP ενός εσωτερικού πίνακα.
- Χρησιμοποιήστε προβολές λεξικού
- Χρησιμοποιήστε το Joins στον όρο FROM
- Χρησιμοποιήστε δευτερεύοντα ερωτήματα στον όρο όπου
Ελαχιστοποιήστε τα έξοδα αναζήτησης
- Χρησιμοποιήστε πεδία ευρετηρίου στον όρο όπου
- Κατά την πρόσβαση σε βάσεις δεδομένων, βεβαιωθείτε πάντα ότι χρησιμοποιείται το σωστό ευρετήριο.
Μειώστε το φορτίο της βάσης δεδομένων
- BufferING
- Λογικές βάσεις δεδομένων
- Αποφύγετε την επαναλαμβανόμενη πρόσβαση στη βάση δεδομένων
Χρήση εσωτερικών πινάκων για Buffer Εγγραφές
- Για να αποφευχθεί η εκτέλεση της ίδιας SELECT πολλές φορές (και επομένως η ύπαρξη διπλότυπων επιλογών), ένα εσωτερικό τραπέζι τύπου HASHED μπορεί να χρησιμοποιηθεί για τη βελτίωση της απόδοσης.
