关于使用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.
 
   如果在运行时 值为空,则 统忽略该关键字段。另外可对关键字段指定偏移量和长度。
 
 
 
 
 
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这条记录。(也确实取得是这条记录)
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23537555/viewspace-660890/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23537555/viewspace-660890/