点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我现在已经写了很多SAP HANA SQL过程,并且在ABAP中有丰富的经验,我一直在思考我们是否需要此功能,或者是否需要HANA SQL。
这是我的问题:
1。 我们在SQL脚本中将许多本地表用于过程。 我们是否需要对此类本地表执行内存刷新或清除/刷新操作?
例如:
*************************************************** *
LT_TAB1 =从表1的<条件>中选择*;
假设LT_TAB1获得10,000个后退杆
LT_TAB2 =从LT_TAB1中选择
现在在此语句之后,如果我想清除我的表LT_TAB1:
i)有可能吗? 如果是,则使用什么关键字/语句。
ii)甚至需要吗? 由于所有内容都在内存中,因此我们甚至需要它,因为存在大量可用内存。
iii)对处理本地表的最佳实践有何建议?
BR,
坦美
您的过程似乎遵循使用表变量来分解逻辑的建议。
这里的一个重要概念是:表变量与ABAP中的内部表不同。
表变量不存储/保留任何数据,而ABAP内部表(和HANA中的临时表)却存储/保留数据。
由于它们不存储任何数据,因此存在 无需在这里"清理"。
一些上下文:
SQLScript使用表变量,类似于在代码中使用功能的方式。
取决于所采用的实际代码路径(即,使用了哪些参数以及应用了哪些WHERE条件),代码编译器可以选择对表变量内联SELECT并/或创建中间结果 设置(具体化数据)然后在相关的处理步骤中使用。
在某些情况下,代码编译器甚至可能会发现表变量根本不会影响结果集并且不会执行
就像普通的SQL语句一样,HANA会自动处理这些中间结果集的创建和删除。 语句完成后(最晚)将内存释放回HANA内部内存池。
回到您的示例:
在这里要发生的事情显然不是 HANA首先读取10000条记录及其LT_TAB1的所有列,直到应用LT_TAB2中的WHERE条件时才删除其中的一些记录。
您只对满足以下条件的LT_TAB2的两列感兴趣:
这就是LT_TAB1和LT_TAB2的组合WHERE条件。
这就是SQLScript编译器通过内联语句为您提供的功能
,然后将其重写为类似
在哪里? 不需要"内部表"。
也不需要清理。
哇,谢谢 Lars Breddemann 的解释。 !! 这对我来说是新的学习。
BR,
坦美。
一周热门 更多>