原文地址   http://www.dlsap.com/thread-34-1-1.html

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所在行索引最低。

最新文章

  1. TCP/IP中链路层的附加数据(Trailer数据)和作用
  2. 实验四 简单的PV操作
  3. 一秒钟Win7笔记本变无线路由器
  4. 10个经典的Java main 方法面试题
  5. Android 6.0 Permission权限与安全机制
  6. mac 别名 ll
  7. apache配置多站点
  8. c# winform 弹出确认消息框判断是否删除?
  9. Java 8 时间日期库的20个使用示例
  10. git 免密码提交代码
  11. 在 Azure 上部署 Kubernetes 集群
  12. VUE 利用webpack 给生产环境和发布环境配置不同的接口地址
  13. CSS margin合并
  14. net core体系-web应用程序-1VS2017构建一个简单的web
  15. Python中property的使用
  16. Python 入门基础19 --面向对象、封装
  17. java面试之谈
  18. 〖Android〗sshd for android, 及映射根文件系统至本地盘符
  19. Linux下LoadGenerator的搭建
  20. Storm简述及集群安装

热门文章

  1. java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性
  2. 个人JS零碎知识整理
  3. UNIX历史和标准
  4. Android开发-Android Studio使用问题解决
  5. DES对称性加密
  6. syntax error near unexpected token `then'问题的解决
  7. IOS 解析crashlog
  8. android 双击返回按钮退出程序。
  9. 优化servlet
  10. cat &gt; file &lt;&lt; EOF 的用法