• 【ABAP】SELECT-ENDSELECT尽量不要用


    ABAP中支持一种SELECT-ENDSELECT的结构,就是可以在SELECT中对取得的每一行数据(或是几个字段)可以先放入一个行结构(或是几个字段)中,再做处理。
    初看似乎觉得蛮有用的,的确这个结构本身就是为了方便处理数据的。但是,如果你滥用了这种结构,那么会严重影响程序性能。
    我接触过的一个报表程序就是用了这种结构,结果系统运行半年后,这张报表就不能用,原因是什么呢?就是因为数据量大了之后,在SELECT和END SELECT之间做处理的时间会很长,从而导致数据库端因为连接超时而断开。
    由此可以判断,SELECT-END SELECT语句在整个过程中是保持数据库连接的,对数据库绝对是个负担。
    所以,在大数据量处理的报表中,不能用SELECT-END SELECT这种写法。
    经过调整后,那张报表速度有所提高,至少不会被数据库踢掉了。

        一般先建立一张内表ITAB,然后使用SELECT ...... FROM TABLE ... INTO CORRESPONDING FIELDS OF TABLE ITAB  来存储需要的数据,然后对ITAB这个内表进行操作。
    SELECT --- ENDSELECT . 这个用法其实是把数据放在一个结构中,然后通过循环使用的。但是使用内表后,那相当于是放在一个缓存中,然后在这个开辟的缓存空间中再次进行循环使用,这样,就可以减少搜索数据的时间,当然,要使用内表里面的数据(我指的是需要使用每一行数据),还是要通过LOOP --- ENDLOOP.来操作的,不过,你可以在LOOP 前,做一个 SORT ITAB BY KEY1的操作,而且在LOOP AT ITAB WHERE 条件,还可以这种用法很好用。
    SELECT --- ENDSELECT.的方法,是针对透明表进行操作的, PROVIDE ---- ENDPROVIDE.是针对内表进行操作的,这是两个不同的用法。后者多用于HR。
  • 相关阅读:
    C#面向对象之封装。
    python 数据处理学习pandas之DataFrame
    有用的vscode快捷键大全+自定义快捷键
    angular中控制器之间传递参数的方式
    angular.module 详解
    如何让类数组也使用数组的方法比如:forEach()
    CSS之flex兼容
    JavaScript中捕获/阻止捕获、冒泡/阻止冒泡
    Vue2.0 探索之路——生命周期和钩子函数的一些理解
    React 生命周期
  • 原文地址:https://www.cnblogs.com/Sapbruce/p/3910073.html
Copyright © 2020-2023  润新知