Code: Alles auswählen.
LOOP AT itab_read ASSIGNING FIELD-SYMBOL(<read>).
APPEND INITIAL LINE TO itab_write ASSIGNING FIELD-SYMBOL(<write>).
MOVE-CORRESPONDING <read> TO <write>.
ENDLOOP.
INSERT zodata_djub FROM TABLE itab_write.
Code: Alles auswählen.
DATA: itab_read TYPE zhr_mss_dj_tab,
itab_write TYPE STANDARD TABLE OF zodata_djub.
ich glaube Du hast da was falsch verstanden, es werden nicht mehrfach Einträge mit gleichem Schlüssel in die DB geschrieben, schaue mal die Doku zu ACCEPTING DUPLICATES KEYS an, das ist die Stelle :Haubi hat geschrieben:Vorsicht!
Bei ACCEPTING DUPLICATE KEYS erzeugst Du (wie der Name schon sagt) tatsächlich zwei oder mehr Einträge mit gleichen Schlüsselbedingungen. Das kann Dir an anderer Stelle in die Suppe spucken:
* bei SELECT SINGLE mit Primärschlüssel wird nur einer der Mehrfach-Einträge getroffen
* bei SELECT ... INTO TABLE <itab> erfolgt ein Abbruch, wenn <itab> eine SORTED TABLE ist
Ich würde mir hier also genau überlegen, wie die Logik eigentlich sein muss. Wo kommen die doppelten Sätze in der Internen Tabelle her? Müsste man eigentlich per Datenbankabfrage prüfen, ob ein Datensatz mit gleichem Schlüssel bereits existiert?
man beachte den Hinweis "Die restlichen Zeilen werden verworfen".Verwendung von ACCEPTING DUPLICATE KEYS
Wenn der Zusatz ACCEPTING DUPLICATE KEYS angegeben ist, werden alle Zeilen eingefügt, für die dies möglich ist. Die restlichen Zeilen werden verworfen und sy-subrc wird auf 4 gesetzt. Das Systemfeld sy-dbcnt wird auf die Anzahl der eingefügten Zeilen gesetzt.