Άνοιγμα SQL & Native SQL σε SAP ABAP

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

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

  • 🧭 Βασική Διάκριση: Η Open SQL διευθύνει πίνακες που δηλώνονται στο λεξικό ABAP και η Native SQL διευθύνει πίνακες που δεν διαχειρίζεται το λεξικό.
  • 🧱 Αρχή Φορητότητας: Το Open SQL παρέχει ομοιόμορφη σύνταξη, σημασιολογία και μηνύματα σφάλματος, έτσι ώστε ένα πρόγραμμα να εκτελείται αμετάβλητο σε κάθε βάση δεδομένων που υποστηρίζεται από SAP.
  • Σύνολο εντολών: Οι εντολές SELECT, INSERT, UPDATE, MODIFY, DELETE και οι εντολές cursor καλύπτουν κάθε λειτουργία Open SQL στην κεντρική βάση δεδομένων.
  • 🔢 απόδοση Codes: Το SY-SUBRC αναφέρει την επιτυχία με την τιμή 0 και το SY-DBCNT αναφέρει τον αριθμό των γραμμών βάσης δεδομένων που έχουν υποστεί επεξεργασία.
  • 🔌 Εγγενής διεπαφή SQL: Οι εντολές περικλείονται μεταξύ των EXEC SQL και ENDEXEC, δεν έχουν τελεία κλεισίματος και ανταλλάσσουν δεδομένα μέσω μεταβλητών κεντρικού υπολογιστή που προηγούνται από άνω και κάτω τελεία.
  • 🚀 Πειθαρχία Απόδοσης: Διατηρήστε το σύνολο αποτελεσμάτων μικρό, περιορίστε τα πεδία, αποφύγετε τους ένθετους βρόχους SELECT, χρησιμοποιήστε πεδία ευρετηρίου και αποθηκεύστε εγγραφές στην ενδιάμεση μνήμη σε έναν εσωτερικό πίνακα HASHED.

Ανοίξτε SQL και Native SQL σε SAP ABAP

Τι είναι η Open SQL και η Native SQL;

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

Στη γλώσσα προγραμματισμού ABAP/4, χρησιμοποιούνται δύο τύποι SQL.

  1. NATIVE SQL
  2. ΑΝΟΙΞΤΕ 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 μπορεί να χρησιμοποιηθεί για τη βελτίωση της απόδοσης.

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

Όχι συνήθως. Η εγγενής SQL παραλείπει το SAP buffer πίνακα, επομένως μια ανάγνωση Open SQL σε buffer είναι συχνά πιο γρήγορη. Η εγγενής SQL κερδίζει μόνο όταν απαιτείται μια λειτουργία συγκεκριμένης πλατφόρμας που δεν προσφέρει η Open SQL.

Ναι. Η Open SQL προσθέτει αυτόματα τον τρέχοντα πελάτη στην πρόταση WHERE ενός πίνακα που εξαρτάται από τον πελάτη. Η εγγενής SQL δεν το κάνει, επομένως το πρόγραμμα πρέπει να παρέχει το ίδιο το MANDT για να αποφύγει την ανάγνωση δεδομένων ξένων πελατών.

Ένας ένθετος βρόχος αποστέλλει μία κλήση βάσης δεδομένων ανά εγγραφή του εξωτερικού πίνακα, η οποία πολλαπλασιάζει τις διαδρομές μετ' επιστροφής του δικτύου. Μια σύνδεση, μια προβολή λεξικού ή μια επιλογή SELECT … FOR ALL ENTRIES ανακτά τα ίδια δεδομένα σε μία μόνο κλήση.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης (AI) στα εργαλεία ανάπτυξης ABAP ανιχνεύουν ένθετους βρόχους SELECT, ελλείπουσες συνθήκες WHERE και αχρησιμοποίητες στήλες και, στη συνέχεια, προτείνουν μια ξαναγραμμένη πρόταση. Η πρόταση χρειάζεται ακόμη έλεγχο κατά τον χρόνο εκτέλεσης στη συναλλαγή ST05 ή SAT.

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

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