首页 > 解决方案 > 在 oracle 中执行更新查询后如何识别哪些记录没有更新?

问题描述

我试图通过以下更新语句更新 oracle 中的 100 条记录,但是当我执行它时,它说 90 条记录已更新,而我在 where 子句中有 100 条记录。

现在如何识别 oracle 中的 100 条记录(代码)中没有更新的 10 条记录(代码)?

在下面的语句中,我想知道没有更新的代号?有什么简单的技巧要知道吗?

update table1 a set a.column1='Yes' where a.column2 in ('code1','code2','code3','code4',........,'code100');

标签: sqloracle

解决方案


您不能真正直接从更新中获取;但是您可以使用相同的值列表(假设它是硬编码列表,而不是来自表)作为集合,然后在集合中查找不在表中的值:

select *
from table(sys.odcivarchar2list('code1','code2','code3','code4',........,'code100')) t
where not exists (
  select null
  from table1 a
  where a.column2 = t.column_value
);

db<> 摆弄一个较小的集合来展示这个想法。

您可以将更新修改为仅更新尚未“是”的行;如果你这样做了,那么你可以寻找根本不存在的集合值,或者那些存在但不需要更新的集合值——当然,在这种情况下,在你实际运行更新之前。db<>小提琴

odcivarchar2list是内置的集合类型,但您可以使用自己的。

如果您已经在集合或表中拥有值,则可以直接将其用于此查询和更新。


推荐阅读