2020-08-26 10:38发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨
并行光标是什么意思
并行游标是一种在存在嵌套循环时提高程序性能的技术。
例如:
如果代码包含这种类型的逻辑:
在itab上循环进入wa。
将itab1循环成wa1。
endloop。
在上述逻辑中,对于itab的一条记录,表itab1再次循环了很多次。 如果itab包含许多记录,并且同时itab1包含双记录,那么这将导致性能问题。
您可以将其修改为
使用键field1 = wa-field1将表itab1读入wa1。
v_tabix = sy-tabix。
如果sy-subrc eq为0。
将itab1从v_tabix循环到wa1。 "它将从该索引开始循环
endif。
致谢
Kannaiah
嗨,Kannaiah
我看了并行光标技术,但有一个问题。
在您的示例中,您首先 从 itab_01 取一行 wa_01 ,然后调用 itab_02 表,根据< em> wa_01 。 而且只有找到了这样的行,您才会记住一个行索引,当您找到所需的行并在该表中从索引一直传递到结尾时,该索引在 itab_02 中停了下来。
能否请您澄清一下,为什么对表中的第一个匹配项调用 READ TABLE ,对表中的其余行调用 LOOP ,比传递整个函数更便宜 常规 LOOP 的桌子? 换句话说,为什么 READ TABLE 比 LOOP 更便宜?
谢谢。
嗨 ,
并行光标是增加程序性能的技术。 例如,如果我们在程序中使用嵌套选择,而不是对于"添加所有条目",则性能肯定会下降。 同样,如果我们在程序中使用嵌套循环,也会降低性能。
我将举一个例子,例如在一个表中使用开票凭证标题详细信息,在另一个表中使用物料详细信息,假设标题表具有1000条记录,而项目表具有10万条记录。 如果要输出,则需要将嵌套循环放在标头表的第一个循环,然后在项目表的下一个循环。 对于标题记录的每个条目,项目表都会循环10万次。 计算总数。 因此,代替开发并行游标技术,请参阅belwo代码。
在标题上循环。
读取表项,其键号=标头号。
如果sy-subrc = 0。
循环访问sy-tabix中的项目。
如果项目号<>标头号。
退出。
否则。
在这里做一些处理。
首先,使用读取表语句读取项目表,以获取文档编号所在的确切索引号。 如果找到,则从该索引循环浏览项目表,直至项目编号<>标头编号。
Rgds
Bujji
编辑者:布吉(Bujji),2008年6月26日下午12:48
嗨,
并行光标的代码:
排序:bkpf_tab BY bukrs belnr gjahr,
bseg_tab BY bukrs belnr gjahr。
bseg_index = 1。
将LOOP AT bkpf_tab插入bkpf_lin。
bkpf_reads = bkpf_reads +1。
在bseg_tab处循环播放,然后从bseg_index进入bseg_lin。
如果bseg_lin-bukrs是<> bkpf_lin-bukrs或
bseg_lin-belnr <> bkpf_lin-belnr或
bseg_lin-gjahr <> bkpf_lin-gjahr。
bseg_index = sy-tabix。
ELSE。
bseg_reads = bseg_reads +1。
ENDIF。
ENDLOOP。
并行游标是在嵌套循环时提高性能的技术。
在使用并行游标之前,两个表都应使用键字段进行排序。 在abap代码中使用并行游标时,排序非常重要。 如果不进行排序,您将无法获得并行游标的预期结果。
请检查此帖子,以最简单的方式说明平行光标。
https://www.learnsapabap .com/2018/05/parallel-cursor.html?m = 1
如果有帮助,请奖励。
如果您使用嵌套循环,则会降低性能。 如果您想提高性能,那么并行游标是解决方案。
您可以使用并行光标查看以下代码。 在这里,我们正在使用二进制搜索读取内部itab1
使用键field1 = wa-field1二进制搜索将表itab1读入wa1。
最多设置5个标签!
并行游标是一种在存在嵌套循环时提高程序性能的技术。
例如:
如果代码包含这种类型的逻辑:
在itab上循环进入wa。
将itab1循环成wa1。
endloop。
endloop。
在上述逻辑中,对于itab的一条记录,表itab1再次循环了很多次。 如果itab包含许多记录,并且同时itab1包含双记录,那么这将导致性能问题。
您可以将其修改为
在itab上循环进入wa。
使用键field1 = wa-field1将表itab1读入wa1。
v_tabix = sy-tabix。
如果sy-subrc eq为0。
将itab1从v_tabix循环到wa1。 "它将从该索引开始循环
endloop。
endif。
endloop。
致谢
Kannaiah
嗨,Kannaiah
我看了并行光标技术,但有一个问题。
在您的示例中,您首先 从 itab_01 取一行 wa_01 ,然后调用 itab_02 表,根据< em> wa_01 。 而且只有找到了这样的行,您才会记住一个行索引,当您找到所需的行并在该表中从索引一直传递到结尾时,该索引在 itab_02 中停了下来。
能否请您澄清一下,为什么对表中的第一个匹配项调用 READ TABLE ,对表中的其余行调用 LOOP ,比传递整个函数更便宜 常规 LOOP 的桌子? 换句话说,为什么 READ TABLE 比 LOOP 更便宜?
谢谢。
嗨 ,
并行光标是增加程序性能的技术。 例如,如果我们在程序中使用嵌套选择,而不是对于"添加所有条目",则性能肯定会下降。 同样,如果我们在程序中使用嵌套循环,也会降低性能。
我将举一个例子,例如在一个表中使用开票凭证标题详细信息,在另一个表中使用物料详细信息,假设标题表具有1000条记录,而项目表具有10万条记录。 如果要输出,则需要将嵌套循环放在标头表的第一个循环,然后在项目表的下一个循环。 对于标题记录的每个条目,项目表都会循环10万次。 计算总数。 因此,代替开发并行游标技术,请参阅belwo代码。
在标题上循环。
读取表项,其键号=标头号。
如果sy-subrc = 0。
循环访问sy-tabix中的项目。
如果项目号<>标头号。
退出。
否则。
在这里做一些处理。
endif。
endloop。
endif。
endloop。
首先,使用读取表语句读取项目表,以获取文档编号所在的确切索引号。 如果找到,则从该索引循环浏览项目表,直至项目编号<>标头编号。
Rgds
Bujji
编辑者:布吉(Bujji),2008年6月26日下午12:48
嗨,
并行游标是一种在存在嵌套循环时提高程序性能的技术。
并行光标的代码:
排序:bkpf_tab BY bukrs belnr gjahr,
bseg_tab BY bukrs belnr gjahr。
bseg_index = 1。
将LOOP AT bkpf_tab插入bkpf_lin。
bkpf_reads = bkpf_reads +1。
在bseg_tab处循环播放,然后从bseg_index进入bseg_lin。
如果bseg_lin-bukrs是<> bkpf_lin-bukrs或
bseg_lin-belnr <> bkpf_lin-belnr或
bseg_lin-gjahr <> bkpf_lin-gjahr。
bseg_index = sy-tabix。
退出。
ELSE。
bseg_reads = bseg_reads +1。
ENDIF。
ENDLOOP。
ENDLOOP。
并行游标是在嵌套循环时提高性能的技术。
在使用并行游标之前,两个表都应使用键字段进行排序。 在abap代码中使用并行游标时,排序非常重要。 如果不进行排序,您将无法获得并行游标的预期结果。
请检查此帖子,以最简单的方式说明平行光标。
https://www.learnsapabap .com/2018/05/parallel-cursor.html?m = 1
如果有帮助,请奖励。
谢谢。
如果您使用嵌套循环,则会降低性能。 如果您想提高性能,那么并行游标是解决方案。
例如:
如果代码包含这种类型的逻辑:
在itab上循环进入wa。
将itab1循环成wa1。
endloop。
endloop。
在上述逻辑中,对于itab的一条记录,表itab1再次循环了很多次。 如果itab包含许多记录,并且同时itab1包含双记录,那么这将导致性能问题。
您可以使用并行光标查看以下代码。 在这里,我们正在使用二进制搜索读取内部itab1
在itab上循环进入wa。
使用键field1 = wa-field1二进制搜索将表itab1读入wa1。
v_tabix = sy-tabix。
如果sy-subrc eq为0。
将itab1从v_tabix循环到wa1。 "它将从该索引开始循环
endloop。
endif。
endloop。
一周热门 更多>