导入表格时候若有重复数据怎么取消对数据库的修改动作

Oracle数据库设置了后置触发器,新增或修改时候会记录修改日志,在报表端设置了‘未修改不更新’,但是从外部导入重复数据时候(比如我把原表导出excel再导入),还是会产生修改这个动作,触发了数据库的后置触发器。请教一下如何在外部导入数据存在重复数据的时候,不进行修改这个动作呢。image.pngimage.png

FineReport Arhole 发布于 2025-2-8 14:22
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
ArholeLv2见习互助
发布于2025-2-11 09:39

触发器的修改逻辑改为:当所有列组合的哈希值前后不一致的时候,再进行修改,否则返回。

最佳回答
0
snrtuemcLv8专家互助
发布于2025-2-8 14:26

导入后导出,在导入,那就是修改了,还是会提交,只是主键一样,安主键更新,你看出来一眼该数据而已

你可以两次提交,第二次提交应该不会触发器触发的

  • Arhole Arhole(提问者) 但是第一次提交已经触发了触发器效果,记录在日志表里面了,这些重复数据没做修改的不应该记录在日志表
    2025-02-08 14:32 
  • snrtuemc snrtuemc 回复 Arhole(提问者) 和你讲了,未修改不更新是你当前页面查询,或者提交后,未修改的不提交入库。
    你是导出数据,再excel导入填报页面,这个时候,单元格数据是修改了,只是是一样数据,他会提交到数据库,但是你主键原因,更新数据,你看起来是一样数据,其实已经update一次了,所以触发触发器执行了。。。
    2025-02-08 14:36 
最佳回答
0
shirokoLv6资深互助
发布于2025-2-8 14:46(编辑于 2025-2-8 14:47)

导入就相当于全表填入表格,然后点提交再进行入库操作你需要在提交的时候拦截掉那些未修改数据,‘未修改不更新’不适用于这种情况。建议用提交条件结合sql函数去筛选掉image.png

最佳回答
0
小潘同學Lv5初级互助
发布于2025-2-8 15:57(编辑于 2025-2-8 16:14)

后置触发器的触发条件可以调整一下,如增加一个updatetime字段,保留“未修改不更新”选项,这样如果数据有更新,updatetime就会变化,以此为条件。

image.png

  • Arhole Arhole(提问者) 帆软端导入报表数据到数据库,即使数据不更新也会修改‘更新时间’这个字段值,导入数据触发了‘修改’这个动作,‘更新时间’就会发生变化。除非是每一个字段都设置条件,old值和new值进行比较,全部发生变化再更新,不过这样比较麻烦。
    2025-02-10 11:33 
  • 小潘同學 小潘同學 回复 Arhole(提问者) 上面的截图,只对已修改的数据行会刷新更新时间,未修改数据的更新时间是不变的。
    2025-02-10 13:29 
  • 3关注人数
  • 53浏览人数
  • 最后回答于:2025-2-11 09:39
    请选择关闭问题的原因
    确定 取消
    返回顶部