Иногда удобно найти записи в таблице используя бинарный поиск. Конструкция LOOP AT … BINARY SEARCH в ABAP отсутствует, но можно ее смоделировать. При выполнении READ TABLE … BINARY SEARCH, в переменную sy-tabix возвращается индекс первой найденной строки. Для поиска остальных строк необходимо считать следующие строки проверить в них значения ключевых полей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
DATA lt_mseg TYPE TABLE OF mseg. DATA lt_mkpf TYPE TABLE OF mkpf. ... SORT lt_mseg BY mblnr mjahr. LOOP AT lt_mkpf ASSIGNING FIELD-SYMBOL(<ls_mkpf>). READ TABLE lt_mseg TRANSPORTING NO FIELDS BINARY SEARCH WITH KEY mblnr = <ls_mkpf>-mblnr mjahr = <ls_mkpf>-mjahr. CHECK sy-subrc EQ 0. LOOP AT lt_mseg ASSIGNING FIELD-SYMBOL(<ls_mseg>) FROM sy-tabix. IF <ls_mseg>-mblnr NE <ls_mkpf>-mblnr OR <ls_mseg>-mjahr NE <ls_mkpf>-mjahr. EXIT. ENDIF. ... WRITE: <ls_mseg>-mblnr, <ls_mseg>-mjahr, <ls_mseg>-zeile. ENDLOOP. ENDLOOP. |
Разве использование Secondary Keys не решает эту проблему и не избавляет от использования SORT + Binary Search ?
Не всегда это возможно. Например, если таблица образована через SELECT .. INTO TABLE @DATA(lt_table)