ABAP,谨慎使用UPDATE更新底表
程序里发现了一段代码,使用UPDATE更新底表,仅有 groupid这一个条件
"回写数据表LOOP AT lt_remsg INTO ls_remsg.UPDATE ztco0061_p SET xkjpz = ls_remsg-belnr WHERE groupid = ls_remsg-groupid."231201 begin 记录执行结果UPDATE ztco0061_p SET msg = ls_remsg-res-msg WHERE groupid = ls_remsg-groupid."231201 end 记录执行结果ENDLOOP.
程序屏幕有四个条件 年、月、公司、设备类型
正式区中,改程序已经上线两三年,数据条目30多万
写个ZSQL
SELECT DISTINCT
groupid
xkjpz
msg
FROM ZTCO0061_P
去除重复值后发现只有区区18笔凭证号
修改代码,UPDATE更新底表时应该要与屏幕选择的一致,然后再添加其他需要的条件才不会改到其他正确的内容。
"回写数据表LOOP AT lt_remsg INTO ls_remsg.UPDATE ztco0061_p SET xkjpz = ls_remsg-belnrmsg = ls_remsg-res-msg "231201 记录执行结果WHERE lfgja = p_year AND lfmon = p_month AND bukrs = p_bukrs and zctype = p_type "新增年、月、公司、设备类型的条件 By ZHF-250001AND groupid = ls_remsg-groupid.ENDLOOP.
推测用户以前可能在抛完了凭证就直接导了数据进行备份,然后现在程序上线了两三年才发现,现在查询底表的时候才发现数据已经被更改成错误的了。