【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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM