码迷,mamicode.com
首页 > 其他好文 > 详细

【ABAP】SELECT-ENDSELECT尽量不要用

时间:2014-08-13 17:40:26      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:使用   数据   div   时间   数据库   res   app   table   

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。

【ABAP】SELECT-ENDSELECT尽量不要用,布布扣,bubuko.com

【ABAP】SELECT-ENDSELECT尽量不要用

标签:使用   数据   div   时间   数据库   res   app   table   

原文地址:http://www.cnblogs.com/Sapbruce/p/3910073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!