zoukankan      html  css  js  c++  java
  • ABAP SELECT

    1、select * 和SELECT XX1 XX2 XX3等的区别:

    如果读取到的XX1 XX2 XX3组成的行数据存在重复,比如读到了超过1行的A1 B2 C1,那么它在内表里只会保存1行,在读取金额时尤其金额如果相同,那么就会少一条数据

    所以如果涉及金额累加等,尽量用SELECT *

    2、SELECT *  ……FOR ALL ENTRIES IN 

    ABAP开发中,使用for all entries in语句将不能使用join的聚集表(例如BSEG)或者需要使用select的内表与内表串联。

    BSEG为例:

    select belnr hkont

    from bsis

    into corresponding fields of table itab1

    where ....

    if not itab1[] is initial.

    select kunnr lifnr belnr

    from bseg

    into corresponding fields of table itab2

    for all entries in itab1

    where belnr = itab1-belnr and hkont = itab1-hkont and ....

    endif.

    由于BESG不能和BSIS做内联,所以先将BSIS要获取的内容放到内表itab1中,然后用 for all entries in 来串联。

    注意:

    1、必须要判断for all entries in后面的内表是否为空,如果为空,where条件中与内表中字段进行比较的结果全部为真,会导致取出非常多的数据,影响系统性能。

    2、使用for all entries in,对于最后得出的结果集系统会自动删除重复行(即使用了distinct)。如果要保留重复行记录,要在SELECT语句中添加足够的key(有必要时,增加全部key),以保证结果集中所需重复项目不会被删除。

    3、对于内表中作为条件替换用项目,不能使用LIKE,BETWEEN,IN比较操作符。这些比较操作符都是不确定比较操作符(将选择条件设定在一个范围内),而 for all entries in 语句的作用相当于将选择条件块全部并列开来,用OR连接,如果每个OR分支中又是不确定的范围,那么系统性能将大大降低。

    4、使用该语句时,ORDER BY语句和HAVING语句将不能使用。

    5、使用该语句时,除COUNT( * )以外的所有合计函数(MAX,MIN,AVG,SUM)都不能使用。

    6、使用 for all entries in 虽然在某些方面很方便的,但很耗内存。

    7、itab-field作为占位符被替换,所以定义内表itab时不要使用with header line,以免造成混淆

    8、select distinct可以直接去重复

  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/jingqing/p/13049271.html
Copyright © 2011-2022 走看看