Open SQL und Native SQL in SAP ABAP
Ziel dieses Tutorials ist es nicht, Sie zu unterrichten SQL oder Datenbankkonzepte, sondern um Ihnen die SQL-Vielfalt in ABAP vorzustellen
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.
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:
Open SQL-Rückgabecodes
Alle Open SQL-Anweisungen füllen die folgenden beiden Systemfelder mit Rückgabecodes.
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.
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.
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 dasselbe SELECT mehrmals ausgeführt wird (und daher doppelte SELECT-Auswahlvorgänge ausgeführt werden), kann zur Verbesserung der Leistung eine interne Tabelle vom Typ HASHED verwendet werden.