abap - 在插入数据库表时找出哪些行是重复的?
问题描述
我有以下情况:
数据库表,我们ZDBX
用主键来调用它:
MATNR, LIFNR, ZART
在报告中我有内部表lt_table TYPE TABLE OF ZDBX
DELETE ADJACENT DUPLICATES FROM lt_table
COMPARING matnr lifnr zart fact_code.
DELETE FROM ZDBX.
INSERT ZDBX FROM TABLE lt_table.
该INSERT
语句将导致短转储,因为内部表中有行具有相同的主键,但不同的fact_code
.
现在,我知道显而易见的解决方案是只比较DELETE ADJACENT DUPLICATES
语句中的主键,但这在我的情况下不起作用,因为用户想要决定哪些fact_code
将被删除。
现在,我的解决方案是将本地表(就在之前INSERT
)导出到 excel 中并找到重复项并询问用户fact_code
他想要哪个。
我可以找出(通过系统变量或 in ST22
)INSERT 在哪一行崩溃?(所以我不必做所有的excel工作)
我理想的解决方案是将 INSERT 放入 aTRY-CATCH
中,找到重复的行,然后将带有重复数据的消息写入 Job-Log。
可能吗 ?
(另外,将列设置fact_code
为主键也不是用户认同的解决方案)
解决方案
您可以使用 FOR ALL ENTRIES 指令来查找现有项目。
SELECT *
FROM ZDBX
INTO TABLE lt_dublicates
FOR ALL ENTRIES IN lt_table
WHERE MATNR EQ lt_table-MATNR
AND LIFNR EQ lt_table-LIFNR
AND ZART EQ lt_table-ZART.
我更喜欢创建 ABAP 报告来列出和选择不需要的记录。您可以添加复选框列以标记行并通过主键自动取消标记相同的其他记录。
推荐阅读
- python - 如何在使用 AWS Lambda 函数创建表后重置 DynamoDB 表写入吞吐量
- android - 登录测试后如何停止加载我的“ProgressDialog”?
- c++ - 我如何使用(char)来获取句子并输出它们(c++)?
- c# - 找不到 osk.exe
- jquery - 带有奇怪的雪佛龙运动的jQuery Sortable
- css - 角度材料输入并在一个表单字段中选择
- gradle - gradle5 中的声纳失败,找不到 SourceSetOutput.getClassesDir
- python - 如何获取熊猫中频率较低的行的索引
- c# - 我如何知道 WPF 的 XAML 中已经定义了哪个 VisualState 控件?
- layout - 如何在颤动中删除列中小部件之间的空间?