【转】ABAP的坑2
来源:互联网 发布:淘宝开店试题答案 编辑:程序博客网 时间:2024/06/16 10:27
如果说工作区域、变量未清空是ABAP第一坑的话,那么FOR ALL ENTRIES的坑大概能算得上第二大坑了。
FOR ALL ENTRIES有三个需要注意的地方。
1、使用前必须判断内表是否为空
如果内表为空,就会使WHERE条件失效,相当于没有指定任何限制。注意是整个WHERE失效,而不是仅仅FOR ALL ENTRIES的字段。
如下面例子:
会取出MAKT所有的数据,而不仅仅是MAKTX等于半成品的。
下面是ST05跟踪的结果:
2、默认的DISTINCT
FOR ALL ENTRIES是把一个SQL分解成多个SQL去执行,然后把结果汇总去重后返回。这个去重的动作其实就是做一个DISTINCT。
把程序改一下,使得IT_MAT有值:
然后运行跟踪一下SQL:
可以看出FOR ALL ENTRIES就是把内表的数据依次放到SQL里面,因为IT_MAT可能有重复的值,所以在最终返回的时候要去重,也就是有个DISTINCT的动作,所以,
第一:最好把内表IT_MAT去重后再使用,提高效率
第二:SELECT后面的要有唯一键值的区别度,防止DISTINCT导致数据丢失。
3、内表大的时候占用内存会很大
如果IT_MAT很大的话,比如几百万数据,执行这个SQL占用的内存是可观的,有时候会达到内存使用的上限,而且效率很差,所以尽量避免大数据量下使用FOR ALL ENTRIES。
阅读全文
1 0
- 【转】ABAP的坑2
- 【转】ABAP的坑1
- 【转】ABAP的坑3
- 【转】ABAP的坑4
- 【转】ABAP的坑5
- [转]关于ABAP的介绍
- 一些常用ABAP program 的例子(转)
- 转:如何调整ABAP程序的性能
- 有趣的ABAP游戏2-拼图
- ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)转
- 转: ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)
- ABAP--OBJECTS ABAP的类的基础知识
- ABAP--OBJECTS ABAP的类的基础知识
- ABAP--OBJECTS ABAP的类的基础知识
- ABAP--ABAP变量的可见范围
- ABAP--ABAP程序员需要参加的课程
- ABAP--ABAP程序员需要参加的课程
- ABAP--ABAP变量的可见范围
- 高吞吐高并发Java NIO服务的架构
- 自学nginx(三): nginx + gunicorn的反向代理
- UVA
- 并查集
- Android6.0哪些权限要动态申请?
- 【转】ABAP的坑2
- python 小记(一)
- opencv 图像像素点的值获取与显示
- pomelo源码分析(4)--connector之网络监听
- RQNOJ 188 购物问题
- 打印数据字典
- C#中使用OpenGL:(四)C#版的OpenGL常量
- 8-26 DAIRY
- 如何使用SetTimer MFC 够详细