Select im loop alternative

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

Select im loop alternative

Beitrag von kaufmann123 (ForumUser / 18 / 6 / 0 ) »
Guten Tag,

ich möchte auf die interne tablle zugreifen, die ich vorher von mhnk mit daten aus einem selektionsbildschirm gefüllt habe. als nächstes soll aus der nächsten tabelle nur das befüllt werden, was auch den inhalten in where entsricht. jedoch wird viel mehr selektiert als im selektionsbildschirm ausgewählt, außerdem bekomme ich den hinweis, das man innerhalpt eines loops eine tabelle nicht überschreiben soll. wie kann ich das anders umsetzen?

Code: Alles auswählen.

  SELECT * FROM mhnk INTO CORRESPONDING FIELDS OF TABLE i_mahn
              WHERE bukrs EQ p_bukrs
              AND   laufd EQ p_laufd
              AND   laufi EQ p_laufi

  LOOP AT i_mahn TRANSPORTING NO FIELDS WHERE
       ( mahna EQ 'MAH3' AND mahns >= '4' )
  OR ( mahna EQ 'MAH2' AND mahns >= '3' )
  OR ( mahna EQ 'IHW'  AND mahns >= '3' )
  OR ( mahna EQ 'OMNI' AND mahns >= '4' ).

    SELECT * FROM mhnd INTO CORRESPONDING FIELDS OF TABLE itab_mahn
                FOR ALL ENTRIES IN itab_mahn
                WHERE bukrs EQ i_mahn-bukrs

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


Re: Select im loop alternative

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Dein LOOP macht überhaupt keinen Sinn, allein schon deshalb, weil Du infolge von TRANSPORTING NO FIELDS keine Ergebnisse bekommst, mit denen Du weiterarbeiten könntest. Außerdem macht ein LOOP über eine interne Tabelle keinen Sinn, bei dem Du dann im Inneren des LOOPS per FOR ALL ENTRIES IN doch wieder auf alle Zeilen der Tabelle zugreifst. Zumal Du FOR ALL ENTRIES IN falsch verwendest, da Du in der WHERE-Bedingung gar nicht auf die Spalten der Tabelle prüfst. Offenbar hast Du bei den ganzen Befehlen gar nicht verstanden, wie sie funktionieren.

Da Du offenbar die Tabellen mhnk und mhnd verknüpfen möchtest, wäre die beste Lösung ein JOIN. Alternativ ein LOOP, bei dem Du dann einen SELECT machst, in dem Du aber auf alle relevanten Spalten aus der mhnk prüfst.

Ich bin kein Mahnexperte, aber nach meinem Dafürhalten müsstest Du die ganzen Spalten

LAUFD
LAUFI
KOART
BUKRS
KUNNR
LIFNR
CPDKY
SKNRZE
SMABER
SMAHSK
BBUKRS
BELNR
GJAHR

von mhnk und mhnd auf Gleichheit verknüpfen, damit Du in der mhnd nur nach den Zeilen suchst, die Deiner mhnk-Auswahl entsprechen. mhnk und mhnd haben ja einen sehr langen Primärschlüssel.

Re: Select im loop alternative

Beitrag von kaufmann123 (ForumUser / 18 / 6 / 0 ) »

Code: Alles auswählen.

  SELECT * FROM mhnk INTO CORRESPONDING FIELDS OF TABLE i_mahn
              WHERE bukrs EQ p_bukrs
              AND   laufd EQ p_laufd
              AND   laufi EQ p_laufi.

  SELECT * FROM mhnd INTO CORRESPONDING FIELDS OF TABLE i_mahn
               FOR ALL ENTRIES IN i_mahn
               WHERE bukrs EQ i_mahn-bukrs.

  DELETE i_mahn WHERE NOT
     ( mahna EQ 'MAH3' AND mahns >= '4' )
OR ( mahna EQ 'MAH2' AND mahns >= '3' )
OR ( mahna EQ 'IHW'  AND mahns >= '3' )
OR ( mahna EQ 'OMNI' AND mahns >= '4' ).
ich hab das jetzt anderes gelöst, aber gibt es da nicht einen performanteren weg, weil join geht ja nur bei datenbanktabellen und nicht bei einem bestimmten wert in einer internen tabelle?

Re: Select im loop alternative

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Hallo Kaufmann123,

DeathAndPain hat Dir eigentlich schon Steigbügel & Sattel bereitet, Du müsstest jetzt aber noch aufs Pferd aufsteigen...

Code: Alles auswählen.

   SELECT * FROM mhnd 
      INNER JOIN MAHNK ON MHND~BUKRS = MHNK~BUKRS
                                    AND alle_anderen_schlüsselfelder der MHNK
      INTO CORRESPONDING FIELDS OF TABLE i_mahn
      where MHND~bukrs = p_... 
         AND haste_nicht_gesehen
         AND ( ( MHNK~MAHNA = '...'  AND MHND~MAHNS >= ...) OR
                  ( nochmal_was_anderes ) ).
Noch einfacher geht es, wenn Du Deinen Report mit der logischen Datenbank MAF verknüpfst, dann bekommst Du die Selektion des Mahnbestandes praktisch hinterher geschmissen. Beispielcoding s. Report RFMAHN01.
Weiterhin viel Freude mit SAP...
Cheers
MrB.

Seite 1 von 1

Vergleichbare Themen

35
Antw.
4759
Views
SELECT + LOOP: Geschwindigkeit?
von foxtrot » 15.11.2019 13:25 • Verfasst in ABAP® für Anfänger
4
Antw.
5511
Views
loop inkl. Select
von Spookykid » 03.05.2011 10:19 • Verfasst in ABAP® für Anfänger
1
Antw.
5307
Views
Loop mit Select-Options in der Where-Bedingung
von made » 11.11.2005 09:12 • Verfasst in ABAP® für Anfänger
2
Antw.
3936
Views
Loop at screen auf Dynpro mit SELECT OPTIONS
von herr mb » 06.12.2012 15:00 • Verfasst in ABAP® Core
1
Antw.
1444
Views

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zeilenumbrüche ersetzen
vor 3 Stunden von rob_abc 4 / 30
Dialog-Container mit Toolbar/Status
vor 23 Stunden von tar gelöst 19 / 2090
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1446

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

Zeilenumbrüche ersetzen
vor 3 Stunden von rob_abc 4 / 30
Dialog-Container mit Toolbar/Status
vor 23 Stunden von tar gelöst 19 / 2090
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1446

Unbeantwortete Forenbeiträge

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