Tabellenzugriff mit OpenSQL (ABAP): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) |
Matt (Diskussion | Beiträge) |
||
Zeile 71: | Zeile 71: | ||
DELETE <dbtab> FROM TABLE <itab>. | DELETE <dbtab> FROM TABLE <itab>. | ||
Quellen: | |||
ABAP Programming (BC-ABA) / Deleting Lines: https://help.sap.com/viewer/cfae740a0a21455dbe6e510c2d86e36a/7.31.18/en-US/fceb3aef358411d1829f0000e829fbfe.html | |||
ABAP Programming (BC-ABA) / Selecting Rows: https://help.sap.com/viewer/cfae740a0a21455dbe6e510c2d86e36a/7.31.18/en-US/fceb3a1f358411d1829f0000e829fbfe.html | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:ABAP]] | [[Category:ABAP]] |
Version vom 22. Juli 2019, 15:21 Uhr
Dieser Artikel zeigt, wie auf Dictionary-Tabellen in der Datenbank mit Hilfe von ABAP und SAP Open SQL zugegriffen werden kann.
Dabei bietet Open SQL mit einem einheitlichen Befehlssatz die Möglichkeit, auf verschiedene zugrundeliegende Datenbanksysteme zuzugreifen.
Einzelnen Datensatz in eine Struktur lesen
SELECT - ENDSELECT - Loop mit SELECT über Tabelle
SELECT * FROM dbtab INTO ls_tab
" Line 1
" Line 2
" Line 3
ENDSELECT.
Die SELECT-ENDSELECT-Kontrollstruktur sollte nicht mehr verwendet werden, weil der ABAP-Prozessor dabei jeden Datensatz einzeln vom Datenbankserver holt, und man damit unnötig teuer Daten vom Datenbankserver holt bzw. ihn unnötig mit kleinkram beschäftigt.
SELECT - Datenbanktabelle in interne Tabelle laden
Allgmeeine Syntax:
SELECT field1 field2 field3
FROM <dbtab>
INTO CORRESPONDING FIELDS OF TABLE <itab>
WHERE field1 = 'abc'.
SELECT plant customer doc_number /bic/matnr1 quantity amount
FROM /bic/aznwvkdat00
INTO CORRESPONDING FIELDS OF TABLE lt_vkdat
WHERE plant = '1060'.
Dabei ermöglicht INTO CORRESPONDING FIELDS OF TABLE
es, die Daten aus einer Datenbanktabelle in eine interne Tabelle zu schreiben, die nur eine Teilmenge der Felder enthält. Das Matching findet anhand der Feldnamen statt.
INSERT - Datensätze erstellen
INSERT INTO <dbtab> VALUES <wa>.
INSERT <dbtab> FROM <wa>.
INSERT <dbtab> FROM TABLE <itab>.
UPDATE - Datensätze ändern
UPDATE <dbtab> FROM <wa>.
UPDATE <dbtab> FROM TABLE <itab>.
UPDATE wird direkt auf dem Datenbankserver ausgeführt. Kann mehrere Datensätze auf einmal verändern.
Möchte man eine Vielzahl Datensätze jeweils unterschiedlich bearbeiten, müsste man den UPDATE-Befehl mehrmals mit unterschiedlichen WHERE-Klauseln aufrufen. Dazu wäre ein übergeordneter LOOP notwendig. Dies wäre allerdings wenig performant. Für so eine Operation würde man eher alle Inhalte in einer internen Tabelle vorbereiten und dann in einem Schritt mit MODIFY in die Datenbank schreiben.
Es können auch mehrere Datensätze direkt geändert werden:
UPDATE <dbtab>
SET col1 = 'X'
WHERE col2 = 'VAL2' OR col2 LIKE 'VAL3-%'.
DELETE - Datensätze löschen
DELETE FROM <dbtab> WHERE <cond>.
DELETE FROM <dbtab> FOR ALL ENTRIES IN <itab> WHERE <field1> = <itab>-<field1>. " Ungetestet
DELETE <dbtab> FROM <wa>.
DELETE <dbtab> FROM TABLE <itab>.
Quellen:
ABAP Programming (BC-ABA) / Deleting Lines: https://help.sap.com/viewer/cfae740a0a21455dbe6e510c2d86e36a/7.31.18/en-US/fceb3aef358411d1829f0000e829fbfe.html
ABAP Programming (BC-ABA) / Selecting Rows: https://help.sap.com/viewer/cfae740a0a21455dbe6e510c2d86e36a/7.31.18/en-US/fceb3a1f358411d1829f0000e829fbfe.html