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.

  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.

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.