【发布时间】:2017-04-19 13:48:03
【问题描述】:
我想使用 Perl 模块 sapnwrfc 从大型 SAP 表(数百万条目)中检索数据,然后将其导出为 CSV 文件。
这个想法是使用功能模块 RFC_READ_TABLE 如下:
# Connect to SAP system
# [...]
my $rd = $conn->function_lookup("RFC_READ_TABLE");
my $rc = $rd->create_function_call;
$rc->QUERY_TABLE("/PLMB/AUTH_OBSID");
$rc->DELIMITER("@");
$rc->FIELDS([ {'FIELDNAME' => 'OBJECT_ID'}, {'FIELDNAME' => 'SID'} ]);
$rc->OPTIONS([{'TEXT' => 'OBJ_TYPE = \'PLM_DIR\''}]);
$rc->invoke;
# Iterate over $rc-DATA and export it to CSV file
# [...]
$conn->disconnect;
问题是脚本以内存不足错误终止,因为检索到的数据超出了现有内存。
是否有可能避免这个问题,比如分页机制或类似的东西?
【问题讨论】:
-
欢迎使用 Stack Overflow 和 Perl 标签。请edit您的问题并附上您正在使用的模块的链接。它可能是metacpan.org/pod/sapnwrfc,但它有一个非常不常见的命名方案,所以最好是安全而不是抱歉。
-
它是否告诉您该错误发生在哪一行?请包括确切的错误消息。迭代数据的部分可能也很有趣。我会假设如果你正确地逐行读取数据,它不会占用你所有的内存。