2020-09-07 23:28发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
新的READ TABLE语法(wa = itab [col1 =…col2 =…])是否支持二进制搜索?
如果否,有什么方法可以实现?
预先感谢
Avishek
二进制搜索一直是可选的,因为存在内部类型为SORTED的表。
甚至可选的是,因为存在辅助键。
带有排序表(例如带有 排序的主键)或带有排序键的表, 表表达式 itabsorted [col1 = ...]或itab [KEY mysortedkey col1 = ...]如果使用已使用键中的列,则将隐式执行二进制搜索。
无需复制/粘贴整个文档,只需参考回答问题的部分即可。
如果使用带有适当键的正确键入的表,则不需要二进制搜索。 优先使用HASHED表。
使用新语法做得很好。 但是HASHED和SORTED表自2000年以来就已经存在...
Hi'
请仔细看一下波纹管文档,它清楚地表明了什么是晦涩的,什么是替代的 。
https://help.sap.com/doc/abapdocu_740_index_htm/7.40/zh-CN/index.htm?url=abentable_exp_itab_line.htm#!ABAP_ALTERNATIVE_2@2@
过时的语法 读取表itab {{} | {WITH KEY dobj} | {WITH KEY = dobj}} [BINARY SEARCH]结果。 选择1 ... {} 影响 如果未明确指定搜索键,则内部表itab必须是带有标题行的标准表。 读取内部表中找到的第一行,其标准键的列中的值与标题行的相应组件中的值相匹配。 标头行中仅包含空白字符的键字段将被视为与所有值匹配。 如果标题行中的所有关键字段仅包含空白字符,则将读取表中的第一项。 内部表的标准键不能包含任何类似字节的组件。 笔记 READ TABLE itab ...语句与表头行itab的显式声明不同,后者是READ TABLE itab FROM wa ...语句中的工作区wa。在后者中,表键而不是搜索键 标头字段的""用于搜索。 可以使用搜索键,而不必考虑其他过时的简短格式(未指定明确的目标区域)。 在过时的非Unicode程序中,标准密钥也可以包含类似字节的组件。 例 在下面的READ语句中(与READ TABLE的示例-table_key相反),通常不会找到任何条目,因为会比较整个标准键。 特别是,属于内部表的标准键的组件deptime和arrtime的类型为t,并且在标题行中包含值" 000000"而不是空白字符作为初始值。 仅读取完全包含这些值的表条目。 数据:spfli的spfli_tab类型标准表 与非唯一键carrid connid 带标题行。 FIELD-SYMBOLS TYPE spfli。 选择 * 来自spfli 哪里carrid ='LH' 插入表@spfli_tab。 spfli_tab-carrid ='LH'。 spfli_tab-connid ='0400'。 读取表spfli_tab ASSIGNING 。 选择2 ...使用KEY dobj 影响 如果在添加WITH KEY之后直接指定了单个数据对象,则内部表itab必须是标准表。 读取内部表中找到的第一行,该行的左对齐内容与数据对象dobj的内容匹配。 数据对象dobj只需要平面数据类型。 在搜索中,处理比数据对象dobj长的表行的开始,就好像它们具有相同的数据类型dobj(广播)一样。 例 要使用附加的WITH KEY dobj评估特定的键字段,必须创建与行类型的相关起始部分相对应的结构。 与READ TABLE-table_key的示例相反,在下面的程序部分中,表spfli_tab的客户端列mandt必须受搜索键的尊重。 数据:spfli的spfli_tab类型标准表 与非唯一密钥carrid connid。 数据:从key_struc开始, mandt TYPE spfli-mandt VALUE'000', 香型TYPE spfli-香型VALUE'LH', connid TYPE spfli-connid VALUE'0400', key_struc的结尾。 FIELD-SYMBOLS TYPE spfli。 选择 * 来自spfli 哪里carrid ='LH' 插入表@spfli_tab。 使用键key_struc ASSIGNING 读取表spfli_tab。 选择3 ... WITH KEY = dobj 影响 如果加号WITH KEY后跟"等号"之后的单个数据对象,则读取内部表itab中找到的第一行,该行的整个内容与数据对象dobj的内容相对应。 必须有可能将数据对象dobj转换为内部表的行类型。 如果dobj的数据类型与内部表的行类型不匹配,则根据转换规则执行转换以进行比较。 注意 该语句具有与将伪组件table_line指定为自由键相同的功能,并由该组件代替。 使用键读取表itab table_line = dobj ... 例 确定(过时)内部表中是否存在具有基本行类型的行。 注释行显示了带有伪组件table_line的通常有效的语法。 带空密钥的i的数据itab类型表。 itab = VALUE#(FOR j = 1直到j> 10(j))。 读表itab WITH KEY = 4 无领域运输。 * READ ITAB WITH KEY table_line = 4 *运输没有领域。 如果sy-subrc = 0。 ... 万一。 加成 ...二进制搜索 影响 加法BINARY SEARCH生成表的二进制搜索,不是线性的。 前提条件和限制与使用带有免费搜索键的添加项时相同。 在找到正确的行之前,必须按如下升序对内部表进行排序: 如果未明确指定搜索键,则由标准键的组件指定。 如果使用WITH KEY dobj指定了搜索键,则按其在数据对象长度中的左对齐内容进行指定。 如果使用WITH dobj指定了搜索键,则由整个表行指定。 注意 在每个过时的变体中加法BINARY SEARCH都需要不同的排序这一事实可能会造成混淆,并产生意外的行为。 因此,在过时的变体和改用READ TABLE的非过时的变体中,不应使用添加。
此致
纳瓦
最多设置5个标签!
二进制搜索一直是可选的,因为存在内部类型为SORTED的表。
甚至可选的是,因为存在辅助键。
带有排序表(例如带有 排序的主键)或带有排序键的表, 表表达式 itabsorted [col1 = ...]或itab [KEY mysortedkey col1 = ...]如果使用已使用键中的列,则将隐式执行二进制搜索。
无需复制/粘贴整个文档,只需参考回答问题的部分即可。
如果使用带有适当键的正确键入的表,则不需要二进制搜索。 优先使用HASHED表。
使用新语法做得很好。 但是HASHED和SORTED表自2000年以来就已经存在...
Hi'
请仔细看一下波纹管文档,它清楚地表明了什么是晦涩的,什么是替代的 。
https://help.sap.com/doc/abapdocu_740_index_htm/7.40/zh-CN/index.htm?url=abentable_exp_itab_line.htm#!ABAP_ALTERNATIVE_2@2@
此致
纳瓦
一周热门 更多>