Die ITAB ist leer, <row> deshalb nicht assigned, ich hätte darauf gewettet, dass ein CATCH CX_SY_ITAB_LINE_NOT_FOUND ausgelöst werden würde. Das ist aber nicht der Fall, stattdessen steht der sy-subrc (!) auf 8.ASSIGN itab[ key name components .... ] TO FIELD-SYMBOL(<row>).
Code: Alles auswählen.
READ TABLE i_tab WITH KEY field1 = '...' ASSIGNING FIELD-SYMBOL(<lfs_line).
IF sy-subrc = 0.
...
ENDIF.
" ... oder
ASSIGN i_tab[ field1 = '...' ] TO FIELD-SYMBOL(<lfs_line).
IF sy-subrc = 0.
...
ENDIF.
In dynamic variants and when a table expression is specified, the statement ASSIGN sets the return code sy-subrc.
Ich hatte schon das gleiche Problem und den gleichen Gedanken - die Ausnahme müsste eigentlich geschmissen werden. Wird sie aber nicht, nu weiß ich auch, dass das normal ist und muss mir keinen Kopp machen...ralf.wenzel hat geschrieben:Da habe ich nicht nachgeschaut, aber ihm schon gesagt, ein 8er-subrc könnte vom ASSIGN kommen - aber die Ausnahme müsste ja vorher ausgelöst werden. Wieder was gelernt. Dann kann der CATCH dort ja weg.
Vielen Dank für den Tipp!!
Ralf
Von der Logik her ist das auch richtig - erst muss der itab-Satz gelesen werden (was schiefgeht - Ausnahme) und das Ergebnis wird dann assigned (wozu es nicht kommt, weil es kein Ergebnis gibt, sondern die Ausnahme geschmissen wird).Haubi hat geschrieben:Ich hatte schon das gleiche Problem und den gleichen Gedanken - die Ausnahme müsste eigentlich geschmissen werden. Wird sie aber nicht, nu weiß ich auch, dass das normal ist und muss mir keinen Kopp machen...