关于使用READ TABLE语句的几点注意事项

<script></script>
关于使用READ TABLE 语句的几点注意事项
 
1. 如果使用READ TABLE语句来读取内部表数据,而不是简单看返回值判断是否存在,那么在使用READ TABLE语句之前,一定要记得使用CLEAR语句清空内部表的工作区。
 
 
 
2. READ TABLE itab WITH KEY = v BINARY SEARCH.
 
 使用READ TABLE语句的二分法搜索以 代替标准顺 序搜索时, 必须首先按关键字中指定的次序对内表进行排序。如果系统找到匹配指定关键字的多行,则读取索引最低的行。二分法搜索 比线性搜索要快。因此,应尽可能将内表排序并且使用二分法搜索。如果找到有匹配关键字的条目,则将系统字段 SY-SUBRC 设置为0并且 SY-TABIX 包含该行的索引。否则,将 SY-SUBRC 设置为非零。
 
 
 
3. WITH KEY 中的检索条件比较符不能使用‘<>’(不等于)。
 
 如果只想取得内部表中不等于某条件的一条记录,那么请使用下面变通方法。
 
       LOOP AT itab WHERE KEY <> ‘XX’.
 
          此处取得第一条记录。
 
          EXIT.
 
       ENDLOOP.
 
   如果在运行时 <KEY> 值为空,则 统忽略该关键字段。另外可对关键字段指定偏移量和长度。
 
 
 
 
 
BTW:
 
感谢binary search,有一次到日本做项目,有这么个课题,
内部表中的数据如下
A     B    C
01 001  20060301
01 001 20060201
01 001  20060101
 
要求取出距现在时间最近的记录。
 
我的做法是先排序
SORT IT_TAB BY A
                         B ASCENDING
                         C DESCENDING.
 
然后用二分法读取
READ IT_TAB INTO WA_TAB WITH KEY A = '01'
                                                         B = '001'
                                                         BINARY SEARCH.
 
应该取到01 001 20060301这条记录。(也确实取得是这条记录)
 
 
这时来之日本SAP公司的检证人员就挑毛病了,说你用二分法从中间切入,怎么能保证取到20060301这条,而不是20060201?
SE接到质问让我抓图证明用二分法没错,否则改用普通READ。
我听了马上告诉SE,ABAP语法就是这样的,这是“常识”!
系统如果找到匹配指定关键字的多行,则读取索引最低的行。
经过我的特殊排序后,20060301所在行索引最低。
 
过后他调查了一下,一点脾气都没有,乖乖地说OK,呵呵。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP/4开发宝典中文版是关于ABAP/4编程语言的手册。其目的在于: · 向新的ABAP/4程序员提供从基本语言组件到复杂报表和事务编码的全面指导 · 向资深ABAP/4程序员提供解决特殊问题的参考方案 为满足这些需求,特提供一个整体概述并本宝典分成三个部分,循序渐进,逐步深入 · ABAP/4的基本组件 · 如何编写报表程序 · 如何编写事务 ABAP/4开发宝典中文版目的不在替换ABAP/4关键字文档。可以通过如下方式调用该文档 · 从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档 · 选择ABAP/4编辑器中的“帮助” · 将光标放在ABAP/4编辑器中的关键字上,然后按下F1键 ABAP/4开发宝典中文版的真正目的在于说明如何使用以及为何使用ABAP/4关键字。并为此提供了许多示例,构成用户自己测试程序的基础。 要获取详细信息,可以进行以下某种操作: · 关于关键字的详细信息,请参阅关键字文档。 · 关于ABAP/4环境术语的详细信息,请从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档”。然后就会出现与解释文本相链接的主题层次。要找出这些文本用于哪些主题,请选择“查看->标题和关键字”。屏幕右侧就会出现一个名称列表。对于所有以ABEN而非TITL开头的名称,如果双击树结构中的主题,则会出现文本屏幕。 · 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试->运行时间分析”,然后单击“提示和技巧”。
ABAP/4开发宝典中文版是关于ABAP/4编程语言的手册。其目的在于: · 向新的ABAP/4程序员提供从基本语言组件到复杂报表和事务编码的全面指导 · 向资深ABAP/4程序员提供解决特殊问题的参考方案 为满足这些需求,特提供一个整体概述并本宝典分成三个部分,循序渐进,逐步深入 · ABAP/4的基本组件 · 如何编写报表程序 · 如何编写事务 ABAP/4开发宝典中文版目的不在替换ABAP/4关键字文档。可以通过如下方式调用该文档 · 从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档 · 选择ABAP/4编辑器中的“帮助” · 将光标放在ABAP/4编辑器中的关键字上,然后按下F1键 ABAP/4开发宝典中文版的真正目的在于说明如何使用以及为何使用ABAP/4关键字。并为此提供了许多示例,构成用户自己测试程序的基础。 要获取详细信息,可以进行以下某种操作: · 关于关键字的详细信息,请参阅关键字文档。 · 关于ABAP/4环境术语的详细信息,请从“ABAP/4编辑器:初始屏幕”(事务SE38)中选择“实用程序->ABAP/4关键字文档”。然后就会出现与解释文本相链接的主题层次。要找出这些文本用于哪些主题,请选择“查看->标题和关键字”。屏幕右侧就会出现一个名称列表。对于所有以ABEN而非TITL开头的名称,如果双击树结构中的主题,则会出现文本屏幕。 · 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试->运行时间分析”,然后单击“提示和技巧”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值