【转】ABAP的坑2
如果說工作區域、變量未清空是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。
總結
以上是生活随笔為你收集整理的【转】ABAP的坑2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】ABAP的坑1
- 下一篇: 【转】ABAP的坑3