哈纳游标-太慢

2020-08-23 22:44发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

一个计算读取另一个计算的输出(相当快,大约20秒),将它们放入游标,在FOR循环中使用该游标,在FOR循环中读取每一行,然后将其写入输出变量。

问题在于,这种新的计算速度非常慢,大约花费了一个小时。

可能是什么问题? 第一次计算的行和列很多(大约20列和40.000行)。

感谢任何想法!

DECLARE CURSOR c_read FOR(从中选择*);

var_Exit =从哑元中选择null作为field1,选择null作为field2;

FOR cur_row作为c_read DO

...一些简单的逻辑,在其中读取游标...

var_exit =从*:var_exit中选择*
全部合并
从虚拟对象中选择cur.row.field1和cur_row.field2;

END FOR;

关闭c_read;

var_out =从var_Exit中选择*;

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

一个计算读取另一个计算的输出(相当快,大约20秒),将它们放入游标,在FOR循环中使用该游标,在FOR循环中读取每一行,然后将其写入输出变量。

问题在于,这种新的计算速度非常慢,大约花费了一个小时。

可能是什么问题? 第一次计算的行和列很多(大约20列和40.000行)。

感谢任何想法!

DECLARE CURSOR c_read FOR(从中选择*);

var_Exit =从哑元中选择null作为field1,选择null作为field2;

FOR cur_row作为c_read DO

...一些简单的逻辑,在其中读取游标...

var_exit =从*:var_exit中选择*
全部合并
从虚拟对象中选择cur.row.field1和cur_row.field2;

END FOR;

关闭c_read;

var_out =从var_Exit中选择*;

付费偷看设置
发送
5条回答
空代码
1楼 · 2020-08-23 23:10.采纳回答

作为 SQLScript的最佳做法-避免使用游标 官方文档中的章说,应尽可能避免使用游标。 由于您不共享在游标循环内执行的"简单逻辑",因此,如果可以用纯SQL逻辑替换您的游标逻辑,或者使用地图合并运算符很有意义。

也许您可以检查一下 您可以使用纯SQL或Map Merge运算符重构逻辑,也可以共享更多详细信息。

致谢,
Florian

Violet凡
2楼-- · 2020-08-23 23:02

如果需要访问 上一行/下一行我将检查是否可以使用HANA窗口函数LAG和LEAD来实现您的逻辑(取决于您是否要检查上一行或下一行)。

SAP浪
3楼-- · 2020-08-23 22:56

如果这有用,我发现了另一种无需创建序列即可添加增量ID的方法:

选择row_number()OVER(按column_1,column_2的顺序排序)AS row_number,* FROM:table;

愤怒的猪头君
4楼-- · 2020-08-23 23:01

听起来像是窗口函数的工作...

灬番茄
5楼-- · 2020-08-23 22:55

我通过SQL解析...我创建了一个序列,向计算输出中添加了增量ID,然后在seq = seq-1上将其与自身连接起来,以便可以比较当前和 上一行并设置字段值。

一周热门 更多>