Öffnen Sie SQL & Native SQL in SAP ABAP

Inhaltsverzeichnis:

Anonim
Das Ziel dieses Tutorials ist nicht, Ihnen SQL- oder Datenbankkonzepte beizubringen, sondern Sie in die SQL-Vielfalt in ABAP einzuführen

In der Programmiersprache ABAP / 4 werden zwei Arten von SQL verwendet.

  1. NATIVE SQL
  2. OPEN SQL.
Mit Open SQL können Sie unabhängig von der vom R / 3-System verwendeten Datenbankplattform auf die im ABAP-Wörterbuch deklarierten Datenbanktabellen zugreifen.

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-Wörterbuch verwaltet werden, und daher Daten integrieren können, die nicht Teil des R / 3-Systems sind.

Open SQL besteht aus einer Reihe von ABAP-Anweisungen, die Operationen an der zentralen Datenbank im R / 3-System ausführen. Die Ergebnisse der Operationen und etwaige Fehlermeldungen sind unabhängig vom verwendeten Datenbanksystem. Open SQL bietet somit eine einheitliche Syntax und Semantik für alle von SAP unterstützten Datenbanksysteme. ABAP-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 verwendet werden, die im ABAP-Wörterbuch erstellt wurden.

Grundlegende Open SQL-Befehle

  • WÄHLEN
  • EINFÜGEN
  • AKTUALISIEREN
  • ÄNDERN
  • LÖSCHEN
  • OPEN CURSOR ,? FETCH ,? CLOSE CURSOR
Beispiel
TABELLEN SBOOK.DATEN C TYP CURSOR,WA LIKE SBOOK.OPEN CURSOR C FÜR SELECT * FROM SBOOK WHERE CARRID = 'LH'AND CONNID = '0400'AND FLDATE = '19950228'BESTELLUNG NACH PRIMÄREM SCHLÜSSEL.MACHEN.FÄLLEN SIE DEN NÄCHSTEN CURSOR C IN WA.WENN SY-SUBRC <> 0.CURSOR SCHLIESSEN C.AUSFAHRT.ENDIF.SCHREIBEN: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-RAUCHER, WA-GEPÄCKGEWICHT, WA-WUNIT,WA-RECHNUNG.ENDDO.

Geben Sie die Passagierliste für den Lufthansa-Flug 0400 am 28-02.1995 aus:

Öffnen Sie die SQL-Rückkehrcodes

Alle Open SQL-Anweisungen füllen die folgenden beiden Systemfelder mit Rückkehrcodes.

SY-SUBRC

Nach jeder Open SQL-Anweisung enthält das Systemfeld SY-SUBRC den Wert 0, wenn die Operation erfolgreich war, und einen anderen Wert als 0, wenn nicht.

SY-DBCNT

Nach einer Open SQL-Anweisung enthält das Systemfeld SY-DBCNT die Anzahl der verarbeiteten Datenbankzeilen.

Natives SQL

Wie bereits erwähnt, können Sie mit Native SQL datenbankspezifische SQL-Anweisungen in einem ABAP-Programm verwenden.

Um die Native SQL-Anweisung verwenden zu können, müssen Sie ihr die EXEC SQL-Anweisung voranstellen und ihr die ENDEXEC-Anweisung folgen.

Syntax

EXEC SQL [PERFORMING ].ENDEXEC.
Nach Native SQL-Anweisungen gibt es keinen Zeitraum. Darüber hinaus führt die Verwendung von Anführungszeichen (") oder einem Sternchen (*) am Zeilenanfang in einer nativen SQL-Anweisung nicht wie bei der normalen ABAP-Syntax zu einem Kommentar. Sie müssen wissen, ob Tabellen- und Feldnamen Groß- / Kleinschreibung sind. vertraulich in der von Ihnen gewählten Datenbank.

In 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 Elementarstrukturen als Hostvariablen verwenden. In Ausnahmefällen werden Strukturen in einer INTO-Klausel so behandelt, als ob alle ihre Felder einzeln aufgelistet 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 den Wert 0 nach der ENDEXEC-Anweisung.

Öffnen Sie SQL - Leistungsregeln

Um die Leistung des SQL und des ABAP-Programms zu verbessern, sollten die folgenden Regeln beachtet werden:

Halten Sie die Ergebnismenge klein

  • Verwenden der where-Klausel
  • Wenn nur ein Datensatz aus der Datenbank erforderlich ist, verwenden Sie nach Möglichkeit SELECT SINGLE.
Minimieren Sie die Menge der übertragenen Daten
  • Beschränken Sie die Anzahl der Zeilen
  • Wenn für eine Tabelle nur bestimmte Felder erforderlich sind, verwenden Sie die Anweisung SELECT INTO…
  • 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 viel effizienter sein als das Ausführen einer großen Anzahl von SELECT- oder SELECT SINGLE-Anweisungen während einer LOOP 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
  • Stellen Sie beim Zugriff auf Datenbanken immer sicher, dass der richtige Index verwendet wird.
Reduzieren Sie die Datenbanklast
  • Pufferung
  • Logische Datenbanken
  • Vermeiden Sie wiederholten Datenbankzugriff
Verwenden interner Tabellen zum Puffern von Datensätzen
  • Um zu vermeiden, dass dasselbe SELECT mehrmals ausgeführt wird (und daher doppelte Auswahlen vorhanden sind), kann eine interne Tabelle vom Typ HASHED verwendet werden, um die Leistung zu verbessern.