是带有OR的WHERE条件中使用的排序顺序

时间:2017-08-10 10:07:51

标签: abap

如果我有一个内部表lt_itab,其类型为werks matnr的SORTED,并且此LOOP是否进行二进制搜索?

LOOP AT lt_itab INTO ls_itab
    WHERE ( werks = space OR werks = '*' ).

或者OR强制进行线性扫描吗?

2 个答案:

答案 0 :(得分:2)

应该是线性扫描。

src/main/resources/templates运算符一样,@ResponseBody只能在FILTER中使用AND加入,以确保它是二进制搜索。

对于散列键,恰好是每个键组件的一个比较表达式。 WHERE允许的唯一关系运算符是op,也是为了确保搜索为=

答案 1 :(得分:2)

来自官方文件:

  

如果在USING KEY之后没有指定显式表键名,则为订单   读取行的位置取决于表类别,如下所示:

     

标准表和排序表。行按升序行读取   主表索引中的数字。在每个循环传递中,系统   字段sy-tabix包含当前行的行号   主表索引。

     

散列表。按行的顺序处理行   插入表中,并按语句后使用的排序顺序   分类。在每个循环传递中,系统字段sy-tabix包含该值   0

     

循环继续运行,直到符合cond的所有表行   条件已被阅读或直到退出并附有声明。如果不   找到适当的行,或者如果内部表为空,则为循环   根本不运行。

循环不进行二分搜索,因为它不是搜索,而是循环,即迭代lt_itab中的每一行。

https://help.sap.com/http.svc/rc/abapdocu_751_index_htm/7.51/en-US/abaploop_at_itab.htm