Range-Tabelle gegen Range-Tabelle abgleichen

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

Range-Tabelle gegen Range-Tabelle abgleichen

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Hallo zusammen,

ich schreibe aktuell ein einem Programm dass COPA Zyklen auswertet. Die Anwenderin möchte als Eingabe eine ganz normale von-bis Selektion (Select-option) für 13 Merkmale und möchte dann alle Zyklen auswerten können, die diese Merkmale in ihren Segmenten haben.

Jetzt hat aber ein Zyklus-Segment ebenfalls von-bis Werte (Tabelle T811K). Wie gleiche ich das jetzt performant ab?

Beispiel: Merkmal Produktgruppe, Eingabe R* bis T*, Zyklus hat im Segmen AAA bis ZZZ, also eine Teilmenge.

Jetzt müsste ich zuerst alle Produktgruppen R* bis T* auflösen in der Zugehörigen Tabelle, dann jeden Eintrag einzeln gegen den ebenfall aufgelösten Segment-Range AAA - ZZZ prüfen? Daraus ergeben sich unendliche Laufzeiten denke ich bei allen Zyklen/Segmenten eines Monats.

Hat jemand eine Idee?

Vielen Dank und schönes Wochenende,

Gruß Wolfgang
Geht nicht gibts nicht

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


Re: Range-Tabelle gegen Range-Tabelle abgleichen

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Vorweg: Ich habe keine Ahnung, was COPA-Zyklen sind. Aber Du hast den Kern Deines Problems ja ganz gut beschrieben, so dass ich versuche, trotzdem zu helfen.

Solange Du nur von-bis-Intervalle brauchst und nicht auf alle anderen möglichen Spezialitäten vorbereitet sein musst, die RANGES-Tabellen so anbieten (Exclude-Option, zusätzliche Einzelwerte etc.), sollte sich das mit überschaubarer Komplexität machen lassen. Du musst doch einfach nur einen LOOP über die eingegebenen Intervalle machen und für jeden davon einen LOOP über die Zyklus-Segmente machen. In diesem inneren LOOP nimmst Du dann einen NMAX auf den Intervallbeginn und einen NMIN auf den Endwert. Am Ende hast Du eine RANGES-Tabelle der Teilintervalle.

Ich bin nicht sicher, ob ich Dein Problem gut genug verstanden habe, dass das Obenstehende funktioniert. Aber ich bin überzeugt, dass es das von Dir beschriebene Performance-Problem nicht gibt, wenn Du performant programmierst:
Jetzt müsste ich zuerst alle Produktgruppen R* bis T* auflösen in der Zugehörigen Tabelle, dann jeden Eintrag einzeln gegen den ebenfall aufgelösten Segment-Range AAA - ZZZ prüfen?
Richtig. Dafür machst Du Dir passend sortierte oder noch besser gehashte interne Tabellen, bei denen Du Dir gut überlegst, was der richtige (effiziente) Schlüssel ist und die Du mit einem dicken SELECT aus der Datenbank befüllst. Bei gehashten Tabellen ist die Suchzeit ja noch nicht mal von der Zahl der Einträge in der Tabelle abhängig (jedenfalls nicht nennenswert). Und dann rast Du da durch und gleichst das ab. Das halte ich nicht für ein Problem. Lahm wird es nur, wenn Du mit Standardtabellen arbeitest.

Re: Range-Tabelle gegen Range-Tabelle abgleichen

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
Hallo DeathAndPain,

Danke für Deine Antwort, mein Ansatz wäre auch optimierte Loops mit "read hashed table" zu machen, ein "Loop at where field in range_table" ist nicht optimiert denke ich, hatten wir schon mal bei einem anderen Problem ausgeschlossen.

Im Endeffekt sind es 2 Ranges Tabellen mit Einzelwerten ( OPTION = 'EQ' ), die dann nach dem Select auf die jeweilige DB, als 2 interne Tabellen mit einer Spalte des gleichen Typs enden.

Ich dachte dass es vielleicht mit den neuen Anweisungen aus 7.5x irgendwas Elegantes gibt, habe da nichts gefunden (oder verstanden... ;-) )

Danke und Gruß,

Wolfgang
Geht nicht gibts nicht

Re: Range-Tabelle gegen Range-Tabelle abgleichen

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
ein "Loop at where field in range_table" ist nicht optimiert denke ich, hatten wir schon mal bei einem anderen Problem ausgeschlossen
Wenn die Range-Table sich akkurat mit dem Tabellenindex deckt? Da wäre ich sehr überrascht; das wäre ja richtig schwach von der SAP. In dem Fall müsstest Du über die Range-Table auch noch mal einen LOOP machen und dann mit WHERE schluesselfeld BETWEEN rangetable-low AND rangetable-high arbeiten. Dann ist das ein statischer Zugriff auf das Schlüsselfeld und sollte auf jeden Fall funktionieren. Allerdings solltest Du für einen Ungleichheitszugriff (zu dem auch BETWEEN gehört) eine SORTED und keine HASHED-Tabelle verwenden, da HASHED-Zugriffe nur bei Prüfung auf Gleichheit verwendet werden können.

Oder, falls RANGED-Tabellen tatsächlich den internen Tabellenindex nicht nutzen können, indirekte Zugriffe (WHERE (bedingungsfeld) ) aber schon, dann halt vorher alle Zeilen der RANGED-Tabelle in einen langen WHERE-String mit OR zwischen den Teilzeilen übersetzen (und beten, dass der ABAP-Interpreter damit den Index für die einzelnen verORten Elemente nutzt).

Seite 1 von 1

Vergleichbare Themen

6
Antw.
4075
Views
Range Tabelle vom Typ RRRANGESID in eine DB-Tabelle füllen
von kaim77 » 15.09.2014 12:32 • Verfasst in ABAP® Core
2
Antw.
11347
Views
Füllen von Range Tabelle
von ulli952 » 22.06.2007 13:08 • Verfasst in ABAP® Core
15
Antw.
15602
Views
Range-Tabelle befüllen
von Bright4.5 » 06.02.2019 15:08 • Verfasst in ABAP® für Anfänger
5
Antw.
3972
Views
Feldsymbol auf RANGE-Tabelle
von Erdbaehr » 07.06.2007 07:56 • Verfasst in ABAP Objects®
1
Antw.
1889
Views
alle Währungen selektieren mit Range-Tabelle
von Bright4.5 » 24.06.2020 09:23 • Verfasst in ABAP® für Anfänger

Ü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
vor 10 Stunden von Bright4.5 1 / 215
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1857
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8460