ABAP 分次数取数(分包) PACKAGE SIZE

在处理大数据时,由于内存限制,需要使用ABAP的PACKAGE SIZE技术分批次获取数据。通过SELECT...ENDSELECT循环从数据库中分批读取,避免内存溢出。在操作中,理解INTO与INTO TABLE的区别至关重要,尤其是在处理字符类型数据时。SAP系统中,每个C类型字符占2字节,内表最大容量限制可能导致超过400万条记录时程序崩溃。为解决此问题,示例代码展示了如何分批复制大型系统表的数据并存储。

当碰到大数据处理时,某一次取数会导致内存不够,或者是超出了内表最大的限制。就需要用到分包取数 PACKAGE SIZE n . N为多少次而不是空间(可以自己试验一下,跟循环DO 循环一样 制定次数)。
使用分包取时,要用,SELECT ENDSELECT 打开循环,依次从DB数据库获取数据。这里面涉及到一个SQL 的INTO 或者APPEND ,之前也说过,INTO 有隐式操作会覆盖上一次数据,那为什么又要用INTO TABLE 呢?
SAP中,一个C类型的字符占用两个字节(2Byte)。内存设置方面,分配给一个前台进程(Dialog Process)默认是4000000000字节(2000000000的Extended Memory和2000000000的Heap Memory,这个大小可以调整),也就是不到4GB的内存空间,当一个内表的行结构是512个字符(1024个字节时),

最多大约可以容纳400万条不到的记录数

,如果超过了这个容量,就会发生DUMP或者程序强制关闭,关于这个问题之前的文章也提到过怎么看,以及怎么调节内存。内存管理 短转储问题 dump 临时修改内存设置

以下代码示例,示范了分包取时的数据操作,是把表更改记录的两张标准表复制数据出来,因为表更改记录是很庞大的一个系统表,一次性取数必定DUMP,所以采用分包,没取数一次进行一次数据操

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abap帅哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值