zoukankan      html  css  js  c++  java
  • 关于使用READ TABLE语句的几点注意事项

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

  • 相关阅读:
    SQL 开发任务超 50% !滴滴实时计算的演进与优化
    Windows中如何使用命令行执行Kettle作业Job
    Kettle增量更新设计技巧
    oracle数据库查询全系整理
    Kettle基本概念 之 Kettle设计模块
    ETL-Kettle学习笔记(入门,简介,简单操作)
    SQL Server 索引——的创建、删除、何时使用、索引查询语句
    I/O端口与I/O内存
    设置用户id和设置组id
    进程控制
  • 原文地址:https://www.cnblogs.com/tomato2014/p/6206257.html
Copyright © 2011-2022 走看看