Tabelleninhalte bearbeiten (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 4: Zeile 4:


<syntaxhighlight lang="abap">
<syntaxhighlight lang="abap">
REPORT /bmw/pat_init_beracc_patl.
REPORT zinit_beracc.


DATA: itab TYPE TABLE OF dbtab.
DATA: itab TYPE TABLE OF dbtab.


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


START-OF-SELECTION.
START-OF-SELECTION.
Zeile 16: Zeile 16:
     WHERE field1 = 'VAL1'.
     WHERE field1 = 'VAL1'.


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

Aktuelle Version vom 24. Juli 2019, 08:36 Uhr

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.'.