Performante Suche in interner Tabelle bei abweichendem Datentyp

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

Performante Suche in interner Tabelle bei abweichendem Datentyp

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Hallo zusammen,

wenn man auf einer sortierten Tabelle einen LOOP...WHERE oder einen DELETE...WHERE macht und dabei Elemente des Tabellenschlüssels auf Gleichheit angibt, dann gibt es eine Compilerwarnung, die darauf hinweist, dass die Datentypen gleich sein sollten, da er anscheinend sonst nicht in der Lage ist, die Schlüsseloptimierung zu nutzen. In meinen Augen etwas dämlich, da es ausreicht, einfach den Vergleichswert per CONV() in das gewünschte Format zu bringen, was der Gleichheitsoperator doch sonst auch überall von alleine (ohne explizites CONV() ) macht, aber sei's drum.

Nun ist mir aufgefallen, dass diese Warnung nicht kommt, wenn man per 7.40-Syntax unter Nutzung des Tabellenschlüssels nach einer bestimmten Tabellenzeile sucht. Fehlt da nur die Warnung, oder stellt ABAP sich an der Stelle von Hause aus geschickter an?

Beispiel:

Code: Alles auswählen.

      IF LINE_EXISTS( <ZEITRAUMTABELLE>-ZEITRAEUME[ BEGDA = <CT_ITAB_INPUT>-BEGINN ENDDA = <CT_ITAB_INPUT>-ENDE ] ).
        DELETE <ZEITRAUMTABELLE>-ZEITRAEUME WHERE BEGDA = CONV BEGDA( <CT_ITAB_INPUT>-BEGINN ) AND ENDDA = <CT_ITAB_INPUT>-ENDE.
      ENDIF.
<ZEITRAUMTABELLE>-ZEITRAEUME ist nach BEGDA sortiert. <ZEITRAUMTABELLE>-ZEITRAEUME-BEGDA ist hier vom Typ BEGDA, wohingegen <CT_ITAB_INPUT>-BEGINN vom Typ STRING ist. Bei dem IF-Statement bekomme ich keine Warnung, wohingegen ich bei dem DELETE die Warnung bekomme, wenn ich den CONV rausnehme. Sollte ich trotzdem auch bei dem IF-Statement den CONV einbauen, oder verhält ABAP sich hier einfach nur inkonsequent?

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


Re: Performante Suche in interner Tabelle bei abweichendem Datentyp

Beitrag von qyurryus (Specialist / 112 / 85 / 45 ) »
Moin,

naiv würde ich es einfach so lassen, wenn der Compiler keine Warnung ausgibt und die IF-Abfrage funktioniert.

Gegenfrage: wozu dient die If-Abfrage überhaupt? Wenn es hier um Performance geht (und ich den Code richtig lese), ist diese doch vollkommen überflüssig? Wenn es die Zeile nicht gibt, wird sie halt nicht gelöscht. Es würde dann aber nur eine Operation auf der internen Tabelle ausgeführt, statt zwei.

Nachtrag: man muss schon den ganzen Beitrag lesen, bitte die Gegenfrage ignorieren.

Re: Performante Suche in interner Tabelle bei abweichendem Datentyp

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
naiv würde ich es einfach so lassen, wenn der Compiler keine Warnung ausgibt und die IF-Abfrage funktioniert.
Funktionieren tut es so oder so, auch in der WHERE-Klausel. Es ist ja nur eine Warnung, die man da bekommt und die darauf hinweist, dass er offenbar den Tabellenschlüssel nicht für die Suche nutzen kann, wenn die Typen nicht gleich sind. Man hat also schlechtere Performance.

Und deshalb gefällt mir der Ansatz "einfach so lassen und nicht mehr drüber nachdenken" nicht so gut. Auf der anderen Seite bin ich grad aber auch zu faul, ein passendes Testprogramm mit Laufzeitmessung zu schreiben und selber nachzumessen. Daher hatte ich gehofft, dass hier vielleicht jemand ist, der es aus dem Kopf weiß.

Seite 1 von 1

Vergleichbare Themen

5
Antw.
2408
Views
Performante Datenübertragung nach Excel mittels OLE2_OBJECT
von Haubentaucher » 12.04.2007 17:40 • Verfasst in ABAP® Core
6
Antw.
6327
Views
Select bei interner Tabelle
von Buetzy » 09.07.2007 13:58 • Verfasst in ABAP® für Anfänger
7
Antw.
1804
Views
.xls Datei aus interner Tabelle
von JanR » 05.10.2020 10:10 • Verfasst in ABAP® für Anfänger
14
Antw.
10402
Views
Löschen aus interner Tabelle
von Beginner014 » 21.11.2014 09:26 • Verfasst in ABAP® für Anfänger
7
Antw.
4661
Views
Concatenate in interner Tabelle
von wenigerABAP » 16.09.2016 12:47 • 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

Trennen Strasse und Hausnummer
vor 13 Minuten von payten 13 / 10220
Eclipse - warum/wann verwendet ihr es [nicht]
vor 32 Minuten von ewx 23 / 1807
Dialog-Container mit Toolbar/Status
vor 14 Stunden von DeathAndPain gelöst 22 / 3195
Daten an Tabelle binden
vor 19 Stunden von Lukas Sanders 2 / 1063
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 631

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

Trennen Strasse und Hausnummer
vor 13 Minuten von payten 13 / 10220
Eclipse - warum/wann verwendet ihr es [nicht]
vor 32 Minuten von ewx 23 / 1807
Dialog-Container mit Toolbar/Status
vor 14 Stunden von DeathAndPain gelöst 22 / 3195
Daten an Tabelle binden
vor 19 Stunden von Lukas Sanders 2 / 1063
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 631

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2624
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9212