本着尽量少的访问数据库,将数据多放在内存中处理,提高数据的处理速度。一般不建议使用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. |