ABAP: Update auf DDIC-Tabelle

Hallo,

ich habe mit dem Update-Befehl so mein Problem. :frowning:

Mein Update sieht so aus:
Code:

Update vbap
set feldA = itab_vbap-feldA
feldB = itab_vbap-feldB
feldC = itab_vbap-feldC
where vbeln = itab_vbap-vbeln.

Die Syntaxprüfung ist auch erfolgreich.
Der sy-subrc beträgt allerdings 4 !

Die interne Tabelle itab_vbap ist ordnungsgemäß gefüllt. Sie beinhaltet zwar nicht alle Felder aus der VBAP, sondern nur eine bestimmte Anzahl, aber die übergebe ich deswegen ja auch extra einzeln per set-Anweisung.

Hat es mit den Schlüsseln bei der VBAP zu tun? Dort ist ja auch die POSNR als Schlüssel angegeben. Ich möchte zu einem Auftrag mit z.B. der Nummer 7 auf jede Zeile der Position - also egal, ob nun nur eine oder vier Positionen vorhanden sind - die Einträge vornehmen. Kann ich Update nur unter Benutzung aller vorhandenen Schlüssel nutzen?

P.S. By the way, ich ändere NICHT eins der Schlüsselfelder!

Hi Lars,

SY-SUBRC = 4 beim UPDATE-Befehl bedeutet:
„Es konnte mindestens eine Zeile nicht geändert werden, da entweder keine passende Zeile gefunden wurde oder die Änderung eine Zeile erzeugen würde, die zu doppelten Einträgen im Primärschlüssel bzw. in einem eindeutigen Sekundärindex der Datenbanktabelle führt.“

Dein Problem wird sein, dass dein Befehl eben nicht eindeutig ist.
Nimm POSNR mit in die WHERE-Bedingung dazu. Vielleicht ists das ja.

Wenns das nicht ist, änder mal Dein UPDATE in ein SELECT FROM VTAB mit der WHERE-Bedingung. Wenn Du dann nichts findest (SUBRC = 4) dann stimmt was nicht wie Du die Tabelle gefüllt hast.

Gruß
Klaus

Hallo Klaus,

danke für Deine Antwort. Ich werde das noch mal ausprobieren.

Mit der POSNR ist’s allerdings so, dass diese in der itab_vbap gar nicht vorhanden ist. Es soll ja gerade so sein, dass alle diese Feldinhalte auch auf mehrere Positionen eines Auftrages in die VBAP geschrieben werden.

Danke erstmal,

Lars