Beste Methode zum ändern einer DB-Tabelle aus einem Arbeitsbereich in ABAP
Ich möchte, um herauszufinden, die beste Lösung für das ändern einer DB-Tabelle aus dem Arbeitsbereich in einer Schleife.
Gibt es mehrere Möglichkeiten, um zu erreichen, daß zuerst;
LOOP AT itab INTO wa.
wa-flag = 'X'.
MODIFY zblabla FROM wa.
ENDLOOP.
Feld und symbol;
LOOP AT ITAB ASSIGNING <WA>.
<WA>-flag = 'X'.
ENDLOOP.
Oder sollte ich ändern, das DBtable von der gesamten internen Tabelle ?
modify zblabla from it.
Ich bin mir nicht sicher, welches der bessere Ansatz ist, für weniger als 50 Einträge. (Ich will auch wissen, was man besser mit viel mehr Einträgen. )
Dank.
- Sie sprechen von einer Datenbank-Tabelle, aber Ihre code-Beispiele verwenden eine interne Tabelle. Bitte geben Sie, wenn Sie möchten, ändern Sie die Daten in der Datenbank oder im Speicher.
- Hey @Philipp. Ich will Daten ändern, auf die Datenbank Tabelle zblabla. Meine Beispiele sind änderungen an der internen Tabelle. Kann Sie prüfen Sie die Beispiele wieder ?
- Das Feld-symbol Beispiel nicht auf die Datenbank zugegriffen wird.
- Ja, ich war nicht sehr sicher, Feld, symbol 🙂 ich dachte, der Typ von <wa> ist zblabla. Aber es ist nicht möglich, richtig ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deinem ersten Beispiel (das mit
LOOP AT ITAB ASSIGNING <WA>
) eigentlich nicht die Datenbank ändern. Es ändert sich nur die Daten im Speicher. Allerdings können Sie danach tunUPDATE zblabla FROM TABLE itab.
die sendet die ganze Tabelle wieder in die Datenbank auf einmal.Wenn jede einzelne Zeile in der Tabelle geändert, das ist viel schneller als die änderung der jede Zeile einzeln. Aber wenn nur ein paar Zeilen der Tabelle sind tatsächlich anders, das ist ziemlich verschwenderisch, und es wird wahrscheinlich schneller sein, aktualisieren Sie nur die Linien, die tatsächlich geändert
MODIFY
.Weitere option, die manchmal verwendet werden, zu aktualisieren, Inhalte der Datenbank ohne auch nur das laden in die Anwendungs-server ist der
UPDATE database_table SET field = value WHERE condition
Befehl.Würde, setzen Sie das flag auf 'X' für jede einzelne Zeile in der Tabelle rechts in der Datenbank-auch ohne
SELECT
nichts.In deinem Beispiel wäre es die bei weitem Schnellste Methode, aber in der realen Welt, Sie haben selten Probleme, die sind so trivial.
UPDATE ... SET ... WHERE ...
sollte auch bevorzugt werden, die überMODIFY
für einzelne Einträge, wenn die Tabelle, die Sie haben, ist sehr breit und Sie hat sich nicht geändert, die meisten, weil es erlaubt Ihnen die Angabe der Felder, die Sie ändern möchten. Sie müssen auch verwenden Sie es, wenn Sie nicht bekommen Ihre Daten über eineSELECT *
sondern nur abgefragt einzelnen Felder.Ersten ändern der Daten in der Schleife mit einem Feld symbol
ich würde dir empfehlen die Verwendung von UPDATE über ÄNDERN.
Wenn Sie verwenden möchten, Ändern Sie Anweisung zum aktualisieren der DB.
ändern einer internen Tabelle, die über den Transport und die where-Klausel, um anzugeben, welche Felder geändert werden, die Nutzung des gesamten Schlüssel der Tabelle und dann mit Hilfe der internen Tabelle ändern Sie die transparente Tabelle (Datenbank-Tabelle).
wa_X-field1 = "something". "where wa_X is of the same type of the table e.g. has the same "fields.
wa_X-field2 = "other something".
MODIFY it_tableX FROM wa_X TRANSPORTING field1 field2 WHERE key1 = wa_X-key1 "(first key)
key2 = wa_X-key2. "(last key)
MODIFY tableX FROM TABLE it_tableX.
Dies ist in der Regel besser, weil es erhöht die Leistung und sichert zu, dass Sie nur ändern, die Zeilen der Tabelle, die du meinst zu ändern.
Hoffe, das hilft.