HANA SQL遍历列

2020-09-14 02:13发布

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

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


我在由HANA支持的SAP BW中工作。 您可以在AMDP(ABAP托管数据库过程)中使用SQL转换数据。

我尝试并未能编写可以执行以下操作的脚本-

1)比较2个表中具有相同结构的每一列

2)确定每条记录和每一列在两个表之间的列值是否不同

3)列出每个记录和列的差异

4)程序应该是通用的,即,如果表结构发生更改,我将不必更改代码。 该代码应该能够确定表结构。

我确实考虑过使用"光标"。 没用 不知道这是因为游标在AMDP中不起作用还是因为它们不能使用内部表。

示例

表1

Col1 Col2 Col3

A01 1 2

A02 3 4

表2

Col1 Col2 Col3

A01 1 2

A02 3 5

结果

Col1 Col2 Col3 Col4
(ID)(颜色名称)(值1)(值2)

A02 Col3 4 5

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

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


我在由HANA支持的SAP BW中工作。 您可以在AMDP(ABAP托管数据库过程)中使用SQL转换数据。

我尝试并未能编写可以执行以下操作的脚本-

1)比较2个表中具有相同结构的每一列

2)确定每条记录和每一列在两个表之间的列值是否不同

3)列出每个记录和列的差异

4)程序应该是通用的,即,如果表结构发生更改,我将不必更改代码。 该代码应该能够确定表结构。

我确实考虑过使用"光标"。 没用 不知道这是因为游标在AMDP中不起作用还是因为它们不能使用内部表。

示例

表1

Col1 Col2 Col3

A01 1 2

A02 3 4

表2

Col1 Col2 Col3

A01 1 2

A02 3 5

结果

Col1 Col2 Col3 Col4
(ID)(颜色名称)(值1)(值2)

A02 Col3 4 5

付费偷看设置
发送
5条回答
能不能别闹
1楼-- · 2020-09-14 02:33

哇,非常具有挑战性的要求(尤其是"通用")...

通常,我会在AMDP中尝试下一个(这不是解决方案,而是方向):

1。 每个表中的所有非键值都连接起来(类似这样)

为了通用,我们需要知道表中有哪些列,以便我们可以尝试使用" SYS"。" COLUMNS"

2。 联接表并比较连接的列以标识不同的行(使用大小写/时间)

3。 最后,如果您需要知道哪一列存在差异,请尝试使用" |"解析值 并比较

这似乎是非常复杂的解决方案(如果有可能的话)。

如果成功(请以任​​何方式),请分享...

BR,


派大星 ヾ
2楼-- · 2020-09-14 02:44

这是" 使SQL成为动态类型的语言" ...

我看到了解决此问题的不同方法以及轻松解决一些较小问题的方法,但是在此之前,如果您可以在这里解释用例,那就太好了。

  • 为什么要对一对(必要的)行列表进行基于列的比较?
  • 为什么它本身需要通用?
  • 反对为每对表生成实际的比较例程是什么意思?
  • 您希望比较哪些数据量?
  • 您认为多少记录不匹配?
  • 比较多久进行一次,最多可以花多少时间?
  • 要比较的表的实际结构多长时间更改一次? 还是总是只更改表名?
Haoba3210
3楼-- · 2020-09-14 02:44

嗨,拉斯,

用例:

数据记录已上载到SAP Business Warehouse系统。

业务部门可以在进一步处理之前检查并根据需要纠正记录。 这些手动更改的记录保存在影子表中。 稍后,它们将覆盖原始记录中的值。
不幸的是,用于进行这些手动更改的ABAP程序未标记已修改的字段。进行了比较,以便可以将报告发送到数据创建者。 他们必须在数据源中进行相同的更正。 否则,我们将在下个月收到相同的错误。

更改记录的数量实际上很小,与每月发送的几千万条记录相比,数量级为1000。 比较是针对8个配对表(总共16个)和每月10个数据传递(国家)。

我不太确定"为每对表生成实际的比较例程"是什么意思。 现在,我们实现了一个简单的解决方案,其中我们为每个字段明确编写了一个比较代码。 对于每个成对的表,这是分别完成的。 这不是我们真正想要的,例如 如果表结构更改,则必须修改代码。 在ABAP中,有些事情比较容易。

Haoba3210
4楼-- · 2020-09-14 02:41

我的意思是,您可以编写一个程序,该程序根据表结构为您创建"简单显式比较"的代码。

如果表在某个时间点发生更改,您只需要运行此生成器程序来更新比较。

鉴于其他信息,我觉得您已经找到了物有所值的最佳解决方案。 当然,用于任意表的通用记录比较和报告实用程序确实有用,但是构建该通用解决方案所需的工作可能会大大超过其收益。

土豆飞人
5楼-- · 2020-09-14 02:38

您好,Andrey,

非常感谢您的解决方案。 在我的特定情况下,我已经知道哪些记录不同。 我需要标识具有不同内容的字段。 解析确实看起来很复杂。 我们当前的解决方案很简单,但不是通用的。 我只是为每个字段写一个比较。 不幸的是,这意味着如果基础表结构发生更改,我必须调整编码。

顺便说一句,ABAP中可能有通用解决方案。 回想起来,我可能应该选择该路径,因为记录的数量非常少(1000条记录)。 没有性能问题。

一周热门 更多>