Tabelleninhalte bearbeiten (ABAP)

Aus MattWiki
Version vom 24. Juli 2019, 09:36 Uhr von Matt (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Datensätze duplizieren

Listing, um Datensätze in einer Tabelle zu duplizieren, und dabei ein Schlüsselfeld auf einen neuen Wert umzusetzen.

REPORT zinit_beracc.

DATA: itab TYPE TABLE OF dbtab.

FIELD-SYMBOLS: <wa> LIKE LINE OF itab.

START-OF-SELECTION.

  SELECT * FROM dbtab
    INTO CORRESPONDING FIELDS OF TABLE itab
    WHERE field1 = 'VAL1'.

  " Wichtig: Bei Feldsymbolen ASSIGNING statt INTO verwenden
  LOOP AT itab ASSIGNING <wa>.
    <wa>-field1 = 'VAL2'.
  ENDLOOP.

  INSERT dbtab FROM TABLE itab.

  WRITE 'Done.'.

Tabelle kopieren

Codebeispiel für ein Programm mit folgenden Eigenschaften:

  • Interne Tabellen
  • Strukturen
  • Instanzierung von Tabellen
  • Datenbankdaten lesen
  • Veränderung von Datenbankdaten
  • Zurückschreiben von Datenbankdaten in die Datenbank


REPORT ztestcopytable.

DATA:
      " Interne Tabellen auf Basis von transparenten Tabellen erstellen
      lt_vkdat TYPE TABLE OF /bic/aznwvkdat00,
      lt_vkdat_res TYPE TABLE OF zlp_10_znwvkdat,
      " Lokale Struktur auf Basis einer internen Tabelle erstellen
      ls_vkdat LIKE LINE OF lt_vkdat,
      ls_vkdat2 TYPE zlp_10_znwvkdat,
      ls_vkdat_res LIKE LINE OF lt_vkdat_res,
      " Optional kann man eine interne Tabelle auf Basis eine Struktur anlegen
      lt_vkdat2 LIKE TABLE OF ls_vkdat2.


SELECT plant customer doc_number /bic/matnr1 quantity amount
  FROM /bic/aznwvkdat00
  INTO CORRESPONDING FIELDS OF TABLE lt_vkdat
  WHERE plant = '1060'.

LOOP AT lt_vkdat INTO ls_vkdat.
  MOVE-CORRESPONDING ls_vkdat TO ls_vkdat_res.
  ls_vkdat_res-p10_custno = ls_vkdat-customer.
  ls_vkdat_res-amount = ls_vkdat-amount + 2000.
  APPEND ls_vkdat_res TO lt_vkdat_res.
ENDLOOP.

DELETE FROM zlp_10_znwvkdat.

MODIFY zlp_10_znwvkdat FROM TABLE lt_vkdat_res.

UPDATE zlp_10_znwvkdat
  SET quantity = 2
  WHERE doc_number = '0224488123'.

WRITE 'Complete.'.