我正在寻找,如果我执行更新命令更新oracle中的单个记录与一些参数和所有参数值在字段值相同.技术上,该记录数据库中没有更新任何值.
在这种情况下.我是否收到任何告诉我记录未被更改的信息
像Employee表有两列FirstName,SecondName并有一条记录'John','Smith'
我按照\n执行了以下更新命令
update Employee (FirstName,LastName) Values('John','Smith');
JNevill.. 5
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上写这个
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上写这个