Open SQL und Native SQL in SAP ABAP
⚡ Intelligente Zusammenfassung
Open SQL und Native SQL in SAP ABAP beschreibt die zwei Wege, auf denen ein ABAP-Programm auf die Datenbank zugreift. Open SQL arbeitet datenbankunabhängig mit Wörterbuchtabellen, während Native SQL datenbankspezifische Anweisungen direkt an die Plattform weiterleitet.
Was sind Open SQL und Native SQL?
Ziel dieses Tutorials ist es nicht, Sie zu unterrichten SQL oder Datenbankkonzepte, sondern um Sie mit der SQL-Vielfalt in ABAP vertraut zu machen
In der Programmiersprache ABAP/4 werden zwei Arten von SQL verwendet.
- NATIVE SQL
- OPEN SQL.
Open SQL ermöglicht den Zugriff auf die im ABAP Dictionary deklarierten Datenbanktabellen unabhängig von der Datenbankplattform, die das R/3-System verwendet.
Mit Native SQL können Sie datenbankspezifische SQL-Anweisungen in einem ABAP/4-Programm verwenden. Dies bedeutet, dass Sie Datenbanktabellen verwenden können, die nicht vom ABAP Dictionary verwaltet werden, und somit Daten integrieren können, die nicht Teil des R/3-Systems sind.
Open SQL besteht aus einer Reihe von ABAP-Anweisungen, die Operationen auf der zentralen Datenbank im R/3-System ausführen. Die Ergebnisse der Operationen und eventuelle Fehlermeldungen sind unabhängig vom verwendeten Datenbanksystem. Open SQL bietet somit eine einheitliche Syntax und Semantik für alle von R/XNUMX unterstützten Datenbanksysteme. SAPABAP-Programme, die nur Open-SQL-Anweisungen verwenden, funktionieren in jedem R/3-System, unabhängig vom verwendeten Datenbanksystem. Open-SQL-Anweisungen können nur mit Datenbanktabellen arbeiten, die im ABAP Dictionary angelegt wurden.
Open SQL ist in fast jedem Programm die Standardwahl, daher wird sein Befehlssatz zuerst behandelt.
Grundlegende Open SQL-Befehle
- SELECT
- INSERT
- AKTUALISIEREN
- ÄNDERN
- LÖSCHEN
- CURSOR ÖFFNEN, FETCH, CURSOR SCHLIESSEN
Beispiel
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.
Ausgabe der Passagierliste für den Lufthansa-Flug 0400 vom 28:
Jede dieser Aussagen meldet ihr Ergebnis über zwei Systemfelder, die im Folgenden beschrieben werden.
Öffnen Sie SQL-Rückgabe Codes
Alle Open SQL-Anweisungen füllen die folgenden beiden Systemfelder mit Rückgabecodes.
| Systemfeld | Bedeutung |
|---|---|
| SY-SUBRC | Nach jeder Open-SQL-Anweisung enthält das Systemfeld SY-SUBRC den Wert 0, wenn die Operation erfolgreich war, andernfalls einen Wert ungleich 0. |
| SY-DBCNT | Nach einer Open-SQL-Anweisung enthält das Systemfeld SY-DBCNT die Anzahl der verarbeiteten Datenbankzeilen. |
💡 Tipp: Prüfen Sie SY-SUBRC immer unmittelbar nach der Anweisung. Ein nachfolgender ABAP-Befehl überschreibt das Feld, und das ursprüngliche Ergebnis geht verloren.
Wenn eine Tabelle außerhalb des ABAP Dictionary liegt, kann Open SQL nicht darauf zugreifen, und Native SQL übernimmt.
Natives SQL
Wie bereits erwähnt, ermöglicht Native SQL die Verwendung datenbankspezifischer SQL-Anweisungen in einer ABAP-Programm.
Um eine native SQL-Anweisung zu verwenden, müssen Sie ihr die EXEC-SQL-Anweisung voranstellen und ihr die ENDEXEC-Anweisung folgen.
Syntax
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Nach Native SQL-Anweisungen gibt es keinen Punkt. Darüber hinaus führt die Verwendung von Anführungszeichen (“) oder eines Sternchens (*) am Anfang einer Zeile in einer nativen SQL-Anweisung nicht wie in der normalen ABAP-Syntax zu einem Kommentar. Sie müssen wissen, ob bei den von Ihnen gewählten Tabellen- und Feldnamen die Groß-/Kleinschreibung beachtet werden muss Datenbank.
Bei Native SQL-Anweisungen werden die Daten mithilfe von Hostvariablen zwischen der Datenbanktabelle und dem ABAP-Programm transportiert. Diese werden im ABAP-Programm deklariert und in der Native SQL-Anweisung durch einen Doppelpunkt (:) vorangestellt. Sie können elementare Strukturen als Hostvariablen verwenden. Ausnahmsweise werden Strukturen in einer INTO-Klausel so behandelt, als ob alle ihre Felder einzeln aufgeführt wären.
Wie in Open SQL enthält SY-DBCNT nach der ENDEXEC-Anweisung die Anzahl der verarbeiteten Zeilen. In fast allen Fällen enthält SY-SUBRC nach der ENDEXEC-Anweisung den Wert 0.
⚠️ Warnung: Natives SQL umgeht die SAP Tabellenpuffer und die automatische Clientbehandlung von Open SQL. Das Clientfeld muss vom Programm angegeben werden, und die Anweisung wird nur auf der Datenbankplattform ausgeführt, für die sie geschrieben wurde.
Open SQL vs Native SQL: Wichtigste Unterschiede
Beide Schnittstellen greifen auf dieselbe Datenbank zu, unterscheiden sich jedoch hinsichtlich Portabilität, Pufferung und den adressierbaren Objekten. Die folgende Tabelle fasst die praktischen Unterschiede zusammen.
| Eigenschaften | Öffnen Sie SQL | Natives SQL |
|---|---|---|
| behandelte Tabellen | Nur Tabellen, die im ABAP Dictionary deklariert sind. | Jede Tabelle der Datenbank, einschließlich Tabellen außerhalb des Wörterbuchs |
| Tragbarkeit | Läuft auf jeder von der Datenbank unterstützten Datenbank. SAP | Gebunden an die Syntax einer Datenbankplattform |
| Syntax | ABAP-Anweisungen mit einem Schlussperioden | Native Anweisungen sind in EXEC SQL … ENDEXEC eingeschlossen, ohne abschließenden Punkt. |
| Die Datenübertragung | Arbeitsbereiche und interne Tische durch INTO | Hostvariablen, denen ein Doppelpunkt vorangestellt ist |
| Kundenbearbeitung und Pufferung | Automatische Clientverwaltung und Tabellenpufferung | Keine automatische Kundenbearbeitung und die SAP Der Puffer wird umgangen. |
| Typische Verwendung | Täglicher Zugriff auf R/3-Anwendungsdaten | Integration von Daten, die nicht Teil des R/3-Systems sind |
Open SQL ist daher die Standardeinstellung, und die folgenden Regeln sorgen für eine hohe Geschwindigkeit.
Open SQL – Leistungsregeln
Um die Leistung des SQL- und damit des ABAP-Programms zu verbessern, sollten Sie die folgenden Regeln beachten:
Halten Sie die Ergebnismenge klein
- Verwendung der where-Klausel
- Wenn nur ein Datensatz aus der Datenbank erforderlich ist, verwenden Sie nach Möglichkeit SELECT SINGLE.
Minimieren Sie die übertragene Datenmenge
- Beschränken Sie die Anzahl der Zeilen
- Wenn nur bestimmte Felder aus einer Tabelle erforderlich sind, verwenden Sie SELECT INTO …-Anweisung
- Beschränken Sie die Anzahl der Spalten
- Verwenden Sie Aggregatfunktionen
Minimieren Sie die Anzahl der Datenübertragungen
- Vermeiden Sie verschachtelte Auswahlschleifen
- Eine alternative Option ist die Verwendung der Anweisung SELECT .. FOR ALL ENTRIES. Diese Anweisung kann oft wesentlich effizienter sein als die Ausführung einer großen Anzahl von SELECT- oder SELECT SINGLE-Anweisungen während einer LOOP-Operation einer internen Tabelle.
- Verwenden Sie Wörterbuchansichten
- Verwenden Sie Joins in der FROM-Klausel
- Verwenden Sie Unterabfragen in der where-Klausel
Minimieren Sie den Suchaufwand
- Verwenden Sie Indexfelder in der where-Klausel
- Achten Sie beim Zugriff auf Datenbanken immer darauf, dass der richtige Index verwendet wird.
Reduzieren Sie die Datenbanklast
- BufferIng.
- Logische Datenbanken
- Vermeiden Sie wiederholte Datenbankzugriffe
Verwenden interner Tabellen, um Buffer Aufzeichnungen
- Um zu vermeiden, dass dieselbe SELECT-Anweisung mehrfach ausgeführt wird (und somit doppelte SELECT-Anweisungen entstehen), interne Tabelle vom Typ HASHED kann zur Leistungsverbesserung verwendet werden.

