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?