Oracle в приведенном вами примере (который синтаксически неверен и выдает ошибку) фактически обновил 1 строку.Вы можете проверить SQL%ROWCOUNT
, и он скажет 1
.Ему не важно, что это было то же значение, а только то, что там была запись, а не предложение WHERE, и она должна была обновить ее.Так оно и было.
И действительно ... это имеет смысл.Зачем читать каждую запись перед обновлением, чтобы увидеть, будет ли она обновляться до той же самой вещи.Быстрее просто написать, где написано, и двигаться дальше.
Единственный способ запретить Oracle НАСТОЯЩЕЕ обновление строки - добавить предложение WHERE, чтобы оно не соответствовало значениям, которые вы обновляете:
UPDATE yourtable
SET FirstName = 'John', LastName = 'Smith'
WHERE FirstName <> 'John' AND LastName <> 'Smith';
Теперь, если вы установите SQL%ROWCOUNT
вы получите 0.
Обновление, чтобы добавить: Действительно хорошо, напишите здесь на dba.stackexchange.com об этом