Fehler: Insert führt zu duplikaten Datensätzen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Hallo zusammen,

Ich untersuche gerade das Programm eines Kollegen und erhalte folgende Fehlermeldung:
"Open SQL-Array-Insert führt zu duplikativen Sätzen in der Datenbank."

Der Fehler trifft nach folgendem Loop beim Insert-Kommando auf:

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.
Hier noch die DATA-Definitions:

Code: Alles auswählen.

DATA: itab_read  TYPE zhr_mss_dj_tab,
      itab_write TYPE STANDARD TABLE OF zodata_djub.


Leider kann ich aktuell noch keinen Fehler erkennen und finde online auch nichts hilfreiches zu dieser Meldung.
Vielleicht weiß hier ja jemand mehr darüber.

Gruß

Dominic

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Habe jetzt rausbekommen, dass es wohl daran liegt, dass INSERT verwendet wird.
MODIFY könnte unter Umständen das Problem beheben.

Abgesehen davon, ist es möglich einen INSERT zu verwenden und doppelte Einträge zu überspringen?

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

der Fehler bedeutet ja, dass es bereits einen Eintrag in der Tabelle gibt, der genau die gleichen Schlüsselfeldinhalte besitzt wie ein neu hinzuzufügender Wert. Ein MODIFY kann wirklich Abhilfe schaffen, jedoch überschreibst du damit ja bereits vorhandene Datensätze in der Datenbank. Und ob was so sinnvoll ist, ist per Ferndiagnose sehr schwer einzuschätzen.
Bei einem INSERT auf eine Datenbank kannst du duplikative Einträge nicht einfach überspringen. Was man aber tun könnte wäre ein Datum und / oder Zähler zu den Schlüsselfeldern hinzuzufügen. Beim Zähler müsste man dann zwar immer den letzten auf der Datenbank vorhandenen ermitteln um den nächsthöheren Zähler zu belegen, aber damit könntest du gleiche Sätze zu unterschiedlichen Datums- oder Zählerangaben festhalten.
Vorteil dabei ist natürlich auch, dass du dir keine Sätze wie bei MODIFY überschreiben würdest.
Gruß,
der Matze

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Das mit dem Überschreiben bei Modify dachte ich mir bereits, daher die Idee mit dem "überspringen".
Hmm. Denke da muss ich mal mit dem Kollegen reden wenn er verfügbar ist ob ein Modify in Ordnung ist in dieser Situation.

Danke dir Thanatos ;)

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von edwin (Specialist / 302 / 10 / 68 ) »
Hi,
es kommt darauf an, was du vorhast, beim INSERTt "table" FROM TABLE it_tab kannst du mit dem Zusatz ACCEPTING DUPLICATE KEYS die bereits vorhandenen Sätze überspringen sy-subrc ist dann 4 und in sy-dbcnt hast du die Anzahl der eingefügten Sätze.
Beim MODIFY überschreibst du die bereits vorhandenen Sätze.
Edwin

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Hey edwin,

Nur zur Kontrolle :) Die SELECT-Anweisung läuft aber trotz sy-subrc = 4 weiter? Dann wäre das ja eine gute Option.

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von edwin (Specialist / 302 / 10 / 68 ) »
Hi,
ja es läuft einfach weiter und sy-subrc = 4

Edwin

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
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?
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Ok vielen Dank für den Einwand Haubi. :)

Ich muss das mit meinem Kollegen abklären. Ich hab die Aufgabe nur als Lückenfüller bekommen bis was neues für mich ansteht (bin Berufseinsteiger).
Sollte kurz über das Programm schauen und die Anzeige optimieren, bis ich gemerkt hab, dass ein Dump auftritt.

Aber danke für die Infos! Die werden sicherlich in Zukunft mal hilfreich sein, wenn ich oder jemand anderes dieses Problem in einem ernsteren Szenario hat.

Schönes Wochenende zusammen!

Re: Fehler: Insert führt zu duplikaten Datensätzen

Beitrag von edwin (Specialist / 302 / 10 / 68 ) »
Hi,
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?
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 :
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.
man beachte den Hinweis "Die restlichen Zeilen werden verworfen".


Grüße Edwin

Folgende Benutzer bedankten sich beim Autor edwin für den Beitrag:
sersen


Seite 1 von 1

Vergleichbare Themen

0
Antw.
1445
Views
5
Antw.
1174
Views
Abweichende Feldinhalte in Duplikaten finden
von Patrick1982 » 09.02.2021 17:43 • Verfasst in ABAP® für Anfänger
5
Antw.
2516
Views
BUTTON im ALV führt nicht in die Methode BUTTON_CLICK
von Nordlicht » 16.03.2016 11:56 • Verfasst in ABAP® Core
1
Antw.
1824
Views
FBCJ maschinelles Buchen führt zu keiner Saldenanzeige im Hauptbuchkonto FS10N
von stefan784 » 06.05.2022 16:00 • Verfasst in Financials
10
Antw.
4273
Views
DELETE von über 420 Mio. Datensätzen
von RantanplanFX » 24.03.2014 11:10 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742