点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
我需要使用" BAPI_PO_CHANGE"更新与某个特定类型" XYZ"相关的所有采购订单。
在生产环境中,我在EKPO表中有超过一百万条与此采购订单相关的生产线。 来自EKKO内部联接EKPO的简单选择语句将导致性能问题。
我想从EKKO/EKPO中选择一定数量的行,例如1000,使用" BAPI_PO_CHANGE"更新这1000行,然后从EKKO/EKPO中选择接下来的1000行。 处理应该像这样继续进行,直到所有行(百万行)都更新为止。
有什么建议吗? 或其他解决方案?
此致
盟友
嗨,盟友,
您可以尝试在SELECT ... ENDSELECT块中使用PACKAGE SIZE添加
根据关键字文档:
干杯
Amy
当我使用带有" CALL FUNCTION'GUI_DOWNLOAD'"的内部表进行处理时,我会使用" OPEN CURSOR"来解决此问题,就像 调用时有一个"提交工作"。只有使用本地SQL时,"保持"状态才处于活动状态...
Ally,
我也遇到了同样的问题,我使用的解决方案是将前端和后端处理结合在一起。 程序逻辑为:
如果sy-batch =''"前端处理
---处理1,准备好内部表
Elseif sy-batch ='X'"背景处理
----流程2,BAPI_PO_CHANGE和BAPI_TRANSACTION_COMMIT
Endif。
---处理1,准备好内部表
从EKKO/EKPO中选择数据,准备内部表。
将内部表导出到数据库索引(将itab导出到DATABASE indx(index)ID'TABLE'。这会将您的内部表存储到Database Index中,您可以从中检索相同的表。
导出内部表后,在后台模式下再次调用同一程序(提交)。 您也可以计划在给定时间开始作业。 再次提交程序以在后台模式下调用后,请退出该程序并查看作业是否已在后台模式下调度。 这将调用上面的过程2。
----流程2,BAPI_PO_CHANGE和BAPI_TRANSACTION_COMMIT
一旦程序在后台执行,您就可以从数据库索引中调用内部表(从itab2 DATABASE indx(index)ID'TABLE'中导入IMPORT itab1)。 这将准备好表以供进一步处理。 然后,您需要在表上循环,并保留1000条记录的计数器。 一旦达到1000条记录,请调用BAPI_PO_CHANGE,然后调用BAPI_TRANSACTION_COMMIT。 这将更新记录。 清除字段,然后再次循环以获取更多记录。 记录日志,您可以将其另存为文件。
如果您尝试同时在前台或后台运行这两个部分,则将花费大量时间。 发现这种方法更好,因为它可以照顾到所有方面,并且在前台执行时不会出现超时错误。
您也可以使用OPEN光标/FETCH光标/Close光标技术。
最终可以做到,而无需打开带有程序包大小的游标。
https://help.sap.com/doc/ abapdocu_752_index_htm/7.52/zh-CN/abapselect_up_to_offset.htm
最终支持一周热门 更多>