点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
由于我是ABAP世界的新手,因此我需要一些有关性能问题的建议。
在我的程序中,有多个选择单个查询命中数据库,其中存储了100k数据,并需要4-5个小时来获取结果。 我引用了许多博客和Google,并得知我可以将数据库中的所有数据放入内部表中并获取数据。 但是我很困惑如何实现它。 下面是代码。 谁能指导我如何提高性能,并在更短的时间内完成获取。 在这里,c_t_data中填充了100k条记录。 然后在其中触发了许多选择单个语句。
在c_t_data处循环播放。
清除:wa_za。
从mara中选择mara-matnr
在marn
中matar = c_t_data-matnr
并且lvorm =空间。< br>检查sy-subrc =0。
选择单个user4 waers
INTO(wa_za-yyuser4,wa_za-yywaers)
从aufk
在其中aufnr = c_t_data-aufnr。
选择单个kursk prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
那里vbeln = c_t_data-vbeln
并且posnr ='000000'。
选择单个库尔斯克prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
哪里vbeln = c_t_data-vbeln
和posnr = c_t_data-posnr。
选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
在vbeln = c_t_data-vbeln
和vposn ='000000'。
选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
那里vbeln = c_t_data-vbeln
和vposn = c_t_data-posnr。
选择tj30t〜txt04进入wa_za-yycontsts
从玩笑中加入
加入jsto
开启jsto〜objnr = jest〜objnr
加入tj30t
开启tj30t〜stsma = jsto〜stsma
在何处jest〜objnr = c_t_data-objnr
AND jest〜inact =空格
AND tj30t〜stsma = jsto〜stsma
AND tj30t〜estat = jest〜stat
AND tj30t〜spras ='EN '。
ENDSELECT。
清除wa_za-yyconroot。
移动c_t_data-vbeln(7)到wa_za-yyconroot。
从vbak中选择单个knumv到vbak-knumv
中,vbeln = c_t_data-vbeln。
从konv中选择单个kbetr到wa_za-yykbetr
中,knumv = vbak-knumv且
KPOSN ='000000'和
KSCHL ='ZDIS'。
选择vbeln parvw kunnr pernr parnr
从vbpa到表itab_vbpa
中,vbeln = c_t_data-vbeln。
预先感谢
库马尔。
嗨
为什么是
和
重复?
您应该将一些单独的单选合并到一个联接中。
除了您使用的标题行已过时之外,因此,我建议您在公司中找一位经验丰富的ABAP-er来协助您完成此任务。
亲切的问候 ,罗伯·迪勒曼斯(Rob Dielemans)
嗨,
1。 首先检查表c_t_data中是否有重复项。 如果是,请复制并删除adj dups,并将其用于后续选择。
2。 从循环中删除所有选择。
嗨,Rahul,
我可以看到您正在循环中使用多个选择查询。 根据 SAP标准,您必须尝试减少在 嵌套方法。
您可以使用以下方法来改进ABAP代码:
1。 通过联接选择
2。 使用ABAP CDS
3。 尽可能使用内部表
以上所有示例都实现了这些概念。
嗨,
如果我将删除循环内的所有选择查询,那么我将如何实现它?
谢谢。
您好,Rahul Kumar,请尝试了解事务ATRA,ST12和ST05如何改进哈希表,排序表和标准表等内部表。
< p>关于Roberto,Rahul Kumar 我想 Dev Parbutteea 建议是在循环之前使用SELECT ... for itab_copy_no_duplicates中的所有条目。
一周热门 更多>