Почему некоторые записи обновляются, а другие отсутствуют в Oracle 11g? - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь обновить таблицу с помощью курсора.но только некоторые записи были обновлены, а другие не обновлены. Предложение where в запросе на обновление имеет столбец с индексом.Не могли бы вы объяснить, почему и что делать в связи с этой проблемой?

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

Индекс находится на table_column2.

1 Ответ

0 голосов
/ 15 марта 2012

Давайте возьмем некоторые образованные догадки.Если вы выполните 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.

Делитесь и наслаждайтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...