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.

  • 🧭 Kernmerkmal: Open SQL adressiert Tabellen, die im ABAP Dictionary deklariert sind, und Native SQL adressiert Tabellen, die nicht vom Dictionary verwaltet werden.
  • 🧱 Portabilitätsprinzip: Open SQL bietet einheitliche Syntax, Semantik und Fehlermeldungen, sodass ein Programm auf jeder unterstützten Datenbank unverändert läuft. SAP.
  • Befehlssatz: SELECT, INSERT, UPDATE, MODIFY, DELETE und die Cursor-Anweisungen decken alle Open SQL-Operationen auf der zentralen Datenbank ab.
  • 🔢 Return Codes: SY-SUBRC meldet Erfolg mit dem Wert 0, und SY-DBCNT meldet die Anzahl der verarbeiteten Datenbankzeilen.
  • ???? Native SQL-Schnittstelle: Die Anweisungen stehen zwischen EXEC SQL und ENDEXEC, enthalten keinen abschließenden Punkt und tauschen Daten über Hostvariablen aus, denen ein Doppelpunkt vorangestellt ist.
  • 🚀 Leistungsdisziplin: Halten Sie das Resultset klein, beschränken Sie Felder, vermeiden Sie verschachtelte SELECT-Schleifen, verwenden Sie Indexfelder und puffern Sie Datensätze in einer HASHED-internen Tabelle.

Open SQL und Native SQL in SAP ABAP

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.

  1. NATIVE SQL
  2. 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.

Häufig gestellte Fragen

Normalerweise nicht. Natives SQL überspringt die SAP Tabellenpuffer sorgen dafür, dass ein gepufferter Open-SQL-Lesevorgang oft schneller ist. Natives SQL ist nur dann im Vorteil, wenn eine plattformspezifische Funktion benötigt wird, die Open SQL nicht bietet.

Ja. Open SQL fügt den aktuellen Mandanten automatisch zur WHERE-Klausel einer mandantenabhängigen Tabelle hinzu. Natives SQL tut dies nicht, daher muss das Programm MANDT selbst angeben, um das Lesen fremder Mandantendaten zu vermeiden.

Eine verschachtelte Schleife sendet für jeden Datensatz der äußeren Tabelle einen Datenbankaufruf, was die Anzahl der Netzwerkzugriffe vervielfacht. Ein Join, eine Dictionary-View oder SELECT … FOR ALL ENTRIES ruft dieselben Daten mit einem einzigen Aufruf ab.

Ja. KI-Assistenten in ABAP-Entwicklungswerkzeugen erkennen verschachtelte SELECT-Schleifen, fehlende WHERE-Bedingungen und ungenutzte Spalten und schlagen anschließend eine umgeschriebene Anweisung vor. Dieser Vorschlag muss jedoch noch zur Laufzeit in der Transaktion ST05 oder SAT geprüft werden.

KI-Scanner markieren jeden EXEC SQL-Block, erläutern die darin enthaltene plattformspezifische Syntax und erstellen eine äquivalente Open SQL-Anweisung. Ein Entwickler prüft die Existenz der Wörterbuchtabellen und testet das Ergebnis vor der Übertragung.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: