zoukankan      html  css  js  c++  java
  • Read Table Binary Search读得field一定要按照Sort的顺序

    如果 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.

     

  • 相关阅读:
    python PyQt5
    传入一张图,生成它的油画版!(python实现)(转 )
    Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)(转)
    Python3.7实现自动刷博客访问量(只需要输入用户id)(转)
    Python3 多线程的两种实现方式
    图片生成字符
    SqlServer性能优化 通过压缩与计算列提高性能(十一)
    json与bson的区别
    浅析Redis 和MongoDB
    Solr DocValues详解
  • 原文地址:https://www.cnblogs.com/sophyzhu/p/1915374.html
Copyright © 2011-2022 走看看