本着儘量少的訪問數據庫,將數據多放在內存中處理,提高數據的處理速度。一般不建議使用loop循環,在循環中select 數據庫。如數據量不大,建議直接提取所有數據,再通過內表處理。或者通過for all entries in 處理。簡列兩例:
例一、
***取客戶名稱,直接去kna1表所有記錄,因數據量不大
select kunnr name1 into corresponding fields of table tkna1 from
kna1 where loevm <> 'X'.
***對應客戶名稱
sort tvbak by kunnr.
sort tkna1 by kunnr.
fcount = 1.
loop at tvbak.
fcount = sy-tabix.
read table tkna1 with key kunnr = tvbak-kunnr binary search.
tvbak-namef = tkna1-name1.
modify tvbak index fcount.
endloop.
這裏有幾點需要注意:
1、將兩需要處理的數據庫排序。(read 處理時需要)
2、最好先去掉重複數據。(本次取數沒有重複數據,故沒做處理)
3、如果限制表中沒有數據,則會取所有數據。(如下例中若tvbak表爲空,則會取所有數據)
4、into corresponding 相比appending corresponding會自動去掉重複數據。
例二、
***選擇訂單的行項目
select vbeln posnr matnr arktx kbmeng vrkme into corresponding
fields of table tvbap from vbap for all entries in tvbak where vbeln =
tvbak-vbeln.
***給訂單行項目添加單據條件數。(前面代碼(沒有列出)已經對tvbak按vbeln重新排序過)
sort tvbap by vbeln.
fcount = 1.
loop at tvbap.
fcount = sy-tabix.
read table tvbak with key vbeln = tvbap-vbeln binary search.
tvbap-knumv = tvbak-knumv.
modify tvbap index fcount.
endloop.
注意點同上
====================================
此處提供代碼三例,僅供參考,還望指正。 1、(se30可以找到) I = 1. 2、(和上述有些不同) DATA: fcount TYPE i. 3、(se30提示) LOOP AT tvbrp. |