为什么有些记录正在更新而有些记录不在oracle 11g?

时间:2012-03-15 16:11:59

标签: oracle plsql oracle11g

我正在尝试使用游标更新表。但只有一些记录被更新而其他记录没有更新。更新查询的where子句有一个带索引的列。你可以解释为什么以及如何处理这个问题?

update table_name 
set table_column1='text' 
where table_column2=(select distinct table_column2 from table);

index在table_column2上。

1 个答案:

答案 0 :(得分:0)

让我们进行一些有根据的猜测。如果你自己执行SELECT DISTINCT TABLE_COLUMN2 FROM TABLE,我怀疑你会发现你只返回一个值,并且TABLE_NAME中TABLE_COLUMN2等于DISTINCT查询返回的值的行是已更新的行。这可能是您的期望与数据库中的数据不同的情况。我相信必须如此,因为如果DISTINCT查询返回多个值,Oracle会抛出错误(如上面的@ a1ex07评论中所述)。您可能希望重写查询以使用IN条件,如

update table_name
  set table_column1='text'
  where table_column2 IN (select distinct table_column2 from table)

TABLE_COLUMN2上的索引应该对UPDATE语句的行为没有影响。

分享并享受。