Show TOC

DatenbankzugriffeLocate this document in the navigation structure

Für Zugriffe auf im ABAP Dictionary definierte relationale Datenbanktabellen der zentralen Datenbank eines SAP-Systems steht mit Open SQL eine in die Sprache eingebundene Untermenge von Standard SQL zur Verfügung. Falls notwendig, können Native SQL oder ADBC für datenbankspezifische SQL-Anweisungen verwendet werden. Darüber hinaus bieten die Interfaces und Klassen von Object Services die Möglichkeit, persistente Objekte auf der Datenbank zu speichern.

Open SQL

Zum Einlesen beliebiger Spalten aus Datenbanktabellen in ABAP-Datenobjekte dient die Anweisung SELECT. Es können entweder die Spalten einer Einzelzeile oder mehrerer Zeilen gelesen werden. Die Daten können einer oder mehreren Datenbanktabellen entnommen werden. In letzterem Fall werden die Datenbanktabellen mittels eines Join-Ausdrucks zusammengeführt. Bei mehrzeiligen Ergebnismengen können die ABAP-Zielobjekte entweder mehrzeilig sein (interne Tabellen) oder hinter der SELECT-Anweisung muss eine ENDSELECT-Anweisung folgen. Die Zeilen der Ergebnismenge werden dann in einer Schleife an die einzeiligen Zielfelder übergeben.

Zum Ändern von Daten in Datenbanktabellen dienen die Anweisungen INSERT, UPDATE, MODIFY und DELETE. Um die Konsistenz der Daten auf der Datenbank sicherzustellen, dürfen ändernde SQL-Anweisungen nur innerhalb einer LUW (Logical Unit of Work) ausgeführt werden. Das SAP-LUW-Konzept beruht auf der Auslagerung von ändernden Anweisungen in Verbuchungs-Funktionsbausteine und einem logischen Sperrkonzept. Verbuchungsbausteine werden zunächst mit dem Zusatz IN UPDATE TASK der Anweisung CALL FUNCTION registriert und dann mit der Anweisung COMMIT WORK angestoßen. Mit der Anweisung ROLLBACK WORK werden Registrierungen rückgängig gemacht.

Beispiel

Auslesen mehrerer Spalten und Zeilen der Datenbanktabelle spfli in eine interne Tabelle flights_tab.

               DATA flights_tab TYPE STANDARD TABLE OF spfli.

SELECT carrid connid cityfrom cityto
       FROM spfli
       INTO CORRESPONDING FIELDS OF TABLE flights_tab
       WHERE carrid = 'LH'.