如果 Sort int_tab1 by aaa bbb ccc.
则 Read table with key bbb=… ccc=… aaa=… Binary search. 肯定会缺少很多返回记录,这样是错误的。
一定要和sort时候的field顺序一样。
** 但是如果是sorted table,那么无论是否顺序一致,都无要紧。都能找到正确的值。
测试程序 |
DATA: lt_afvc TYPE TABLE OF afvc, lv_i1 TYPE sytabix, lv_i2 TYPE sytabix, lv_cnt TYPE i. FIELD-SYMBOLS: <afvc> TYPE afvc, <afvc1> TYPE afvc, <afvc2> TYPE afvc. SELECT * FROM afvc INTO TABLE lt_afvc. SORT lt_afvc BY aufpl aplzl arbid. LOOP AT lt_afvc ASSIGNING <afvc>. READ TABLE lt_afvc ASSIGNING <afvc1> WITH KEY arbid = <afvc>-arbid aplzl = <afvc>-aplzl aufpl = <afvc>-aufpl BINARY SEARCH. lv_i1 = sy-tabix. READ TABLE lt_afvc ASSIGNING <afvc2> WITH KEY aufpl = <afvc>-aufpl aplzl = <afvc>-aplzl arbid = <afvc>-arbid BINARY SEARCH. lv_i2 = sy-tabix. IF lv_i1 NE lv_i2. lv_cnt = lv_cnt + 1. WRITE: / lv_i1, 30 lv_i2, 50 <afvc>-aufpl, 65 <afvc>-aplzl, 75 <afvc>-arbid. ENDIF. ENDLOOP. uline. WRITE: / 'Number of mismatches: ', 20 lv_cnt. lv_cnt = lines( lt_afvc ). WRITE: / 'Number of checks: ', 20 lv_cnt. |
问题:
那么如果read table with key aaa=… bbb=… binary search. 结果会有缺失么?
下面证明不会缺失。
测试程序 |
*&---------------------------------------------------------------------* *& Report ZTEST_BINARY_SEARCH *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZTEST_BINARY_SEARCH. data: IT_VBAP TYPE STANDARD TABLE OF VBAP WITH HEADER LINE, IT_VBAP2 TYPE STANDARD TABLE OF VBAP WITH HEADER LINE, IT_VBAP3 TYPE STANDARD TABLE OF VBAP WITH HEADER LINE, IT_XTAb TYPE STANDARD TABLE OF VBAK WITH HEADER LINE. data: cr_usrname type vbak-ernam, doc_nr type vbak-vbeln, doc_nr2 type vbak-vbeln.. cr_usrname = 'CURA'. doc_nr = '0000005081'. doc_nr2 = '0000005081'. SELECT * FROM VBAK INTO TABLE IT_XTAB WHERE ERNAM = CR_USRNAME. IF SY-SUBRC <> 0. MESSAGE E010(ZSOP). EXIT. ENDIF. SELECT DISTINCT MANDT VBELN POSNR KWMENG KBMENG MATNR ARKTX NETWR KWMENG VRKME WAERK LPRIO VSTEL ROUTE WERKS MWSBP FROM VBAP INTO CORRESPONDING FIELDS OF TABLE IT_VBAP FOR ALL ENTRIES IN IT_XTAB WHERE VBELN = IT_XTAB-VBELN ORDER BY PRIMARY KEY. it_vbap2[] = it_vbap[]. write: /, 'standard read table ------------- ', /. do 5 times. do. read table IT_VBAP2 WITH KEY VBELN = doc_nr. if sy-subrc <> 0. exit. endif. write: /,'Vbeln', it_vbap2-vbeln, ' Posnr', it_vbap2-posnr. delete it_vbap2 index sy-tabix. enddo. write: /, 'loop index:', sy-index. doc_nr = doc_nr + 1. call function 'CONVERSION_EXIT_ALPHA_INPUT' exporting input = doc_nr importing output = doc_nr. enddo. it_vbap3[] = it_vbap[]. write: /, 'binary read table ------------ ', /. do 5 times. do. read table IT_VBAP3 WITH KEY VBELN = doc_nr2 BINARY SEARCH. if sy-subrc <> 0. exit. endif. write: /,'Vbeln', it_vbap3-vbeln, ' Posnr', it_vbap3-posnr. delete it_vbap3 index sy-tabix. enddo. write: /, 'loop index:', sy-index. add 1 to doc_nr2. call function 'CONVERSION_EXIT_ALPHA_INPUT' exporting input = doc_nr2 importing output = doc_nr2. enddo. |