Insert bei Read

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Insert bei Read

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo mal wieder :)

ich habe schon wieder ein kurzes Problem und zwar bekomme ich bei folgendem Code (siehe unten) folgende Fehlermeldung:

Über eine implizite Indexangabe soll in der Tabelle "GT_AUSGABE" eine
Zeile geändert, gelöscht oder eingefügt werden. Es ist statisch nicht
erkennbar, ob ein LOOP über "GT_AUSGABE" aktiv ist.

Ist bei einem Read ein Insert nicht möglich??

Also ein Append hat funktioniert, das möchte ich allerdings nicht.

Weiß da jemand Bescheid?

Vielen Dank

Code: Alles auswählen.

  LOOP AT gt_join INTO gs_join.
    READ TABLE gt_ausgabe TRANSPORTING NO FIELDS WITH KEY
    iban = gs_join-iban.
    IF sy-subrc = 0
    AND gs_ausgabe-bukrs <> gs_join-bukrs.
      insert gs_join INTO gt_ausgabe.
    ENDIF.
  ENDLOOP.

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


Re: Insert bei Read

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Ist bei einem Read ein Insert nicht möglich??
Ein INSERT ist immer möglich, nur musst Du ihm sagen, wo Du die Zeile denn gerne eingefügt haben möchtest. Das kann er nicht hellsehen! Bei einem APPEND ist es klar; da wird die Zeile ans Ende angehängt. Ein INSERT schiebt sie irgendwo in der Mitte rein. Wo genau, musst Du ihm sagen. Und Du wirst ja auch wissen, weshalb Du den APPEND nicht willst, also hast Du ja offenbar eine Vorstellung davon, wo Deine neue Tabellenzeile landen soll.

Wenn sie z.B. am Anfang der internen Tabelle eingefügt werden soll, dann schreibst Du:

Code: Alles auswählen.

insert gs_join INTO gt_ausgabe INDEX 1.
Wenn Deine Zieltabelle sortiert ist und Du willst, dass der INSERT die neue Zeile dort einfügen soll, wo sie entsprechend der Sortierung stehen muss, dann schreibst Du:

Code: Alles auswählen.

insert gs_join INTO TABLE gt_ausgabe.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
L0w-RiDer


Re: Insert bei Read

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hey! Vielen Dank DeathAndPain!

Re: Insert bei Read

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hey, ich hätte leider immer noch ein kleines Problem und zwar möchte ich eigentlich folgendes haben:

Ich habe eine Tabelle 1(gt_join) und eine Tabelle2(gt_ausgabe). Nun möchte ich schauen ob es Einträge aus der gt_ausgabe gibt die die gleiche IBAN-Nummer haben, wie in Tabelle 1(gt_join) und unterschiedliche Buchungskreise (solche Einträge können auch öfters vorkommen und zwar bei unterschiedlichen Buchungskreisen). Dann möchte ich diese Treffer aus der gt_join an der Stelle in gt_ausgabe einfügen, bei denen sie in gt_ausgabe vorkommen.

Das wäre mein Coding (siehe unten, es stimmt leider nicht)

Erkennt jemand den Fehler oder weiß jemand eine gute Alternative ??

Vielen Dank

Code: Alles auswählen.

  LOOP AT gt_ausgabe INTO gs_ausgabe.                                       
    lv_help_count = lv_help_count + 1.                                      
    READ TABLE gt_join TRANSPORTING NO FIELDS WITH KEY                      
    iban = gs_ausgabe-iban.                                                 
    IF sy-subrc = 0.
      if gs_ausgabe-bukrs <> gs_join-bukrs.                                 
        INSERT gs_join INTO gt_ausgabe INDEX  lv_help_count.
      endif.                                                                
    ENDIF.                                                                  
  ENDLOOP.

Re: Insert bei Read

Beitrag von the_simonabt (ForumUser / 1 / 0 / 0 ) »
DeathAndPain hat geschrieben:
09.04.2019 17:10
Ist bei einem Read ein Insert nicht möglich??
Ein INSERT ist immer möglich, nur musst Du ihm sagen, wo Du die Zeile denn gerne eingefügt haben möchtest. Das kann er nicht hellsehen! Bei einem APPEND ist es klar; da wird die Zeile ans Ende angehängt. Ein INSERT schiebt sie irgendwo in der Mitte rein. Wo genau, musst Du ihm sagen. Und Du wirst ja auch wissen, weshalb Du den APPEND nicht willst, also hast Du ja offenbar eine Vorstellung davon, wo Deine neue Tabellenzeile landen soll.

Wenn sie z.B. am Anfang der internen Tabelle eingefügt werden soll, dann schreibst Du:

Code: Alles auswählen.

insert gs_join INTO gt_ausgabe INDEX 1.
Wenn Deine Zieltabelle sortiert ist und Du willst, dass der INSERT die neue Zeile dort einfügen soll, wo sie entsprechend der Sortierung stehen muss, dann schreibst Du:

Code: Alles auswählen.

insert gs_join INTO TABLE gt_ausgabe.
Hey, sorry prinzipell nicht falsch aber gefährlich deine Aussage. Denn ein Insert sollte im Normalfall immer bevorzugt werden vor einem APPEND außer es ist wirklich wichtig, dass die Einträge am Ende der Tabelle landen( auch im ABAP: im Style Guide). Denn der INSERT funktioniert mit allen Tabellentypen und auch Schlüsseltypen. Machen leider viele Entwickler falsch.

Und zum Ursprünglichen Problem einfach INSERT itab INTO TABLE itab verwenden, dieser hängt intern die Einträge zwar analog zum APPEND auch am Ende der Tabelle an, ist aber immerhin besser als ein blanker APPEND.

Re: Insert bei Read

Beitrag von DeathAndPain (Top Expert / 1952 / 259 / 413 ) »
Denn ein Insert sollte im Normalfall immer bevorzugt werden vor einem APPEND außer es ist wirklich wichtig, dass die Einträge am Ende der Tabelle landen( auch im ABAP: im Style Guide). Denn der INSERT funktioniert mit allen Tabellentypen und auch Schlüsseltypen.
Sehe ich anders. Wenn ich einer meiner Tabellen einen Wert hinzufüge, mache ich mir immer Gedanken darüber, was für eine interne Tabelle ich vor mir habe. Das ist schon deswegen notwendig, weil ich beim Einfügen in Nicht-Standard-Tabellen zum einen den Schlüssel verwenden sollte und zum anderen die Tabelle einen UNIQUE KEY haben könnte und ich vermeiden muss, dass es zu DUPLICATE KEY-Dumps kommt. In Eclipse (was ich zum Entwickeln nur noch nutze, weil es einfach so viel besser ist als die SE38) reicht ja einmal auf dem Tabellennamen F2 drücken, dann sehe ich das.

Insofern finde ich bei Standardtabellen einen APPEND völlig unproblematisch und von der Lesbarkeit her besser nachvollziehbar als einen INSERT INTO TABLE, bei dem der Leser erst recherchieren muss, wo die neue Zeile der Tabellendefinition zufolge landen wird. Bei sortierten Tabellentypen sollte man den APPEND natürlich vermeiden (bei Hashtabellen geht er gar nicht).

Seite 1 von 1

Vergleichbare Themen

6
Antw.
393
Views
Insert-Fehlermeldung-JOB
von HH_ABAP » 30.06.2023 11:13 • Verfasst in ABAP® für Anfänger
3
Antw.
3143
Views
Insert into Tabelle
von hauke_daniel » 02.01.2008 12:04 • Verfasst in ABAP® für Anfänger
1
Antw.
1119
Views
SQL Insert in ABAP
von Paul » 14.11.2018 20:55 • Verfasst in ABAP® für Anfänger
4
Antw.
3557
Views
Native SQL - Insert
von MarkusG » 04.04.2008 07:13 • Verfasst in ABAP® Core
6
Antw.
3225
Views
Falscher Insert?
von Beginner014 » 24.07.2014 10:33 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

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.

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821