【发布时间】:2015-11-12 11:10:00
【问题描述】:
我有一长串在我的 Oracle 11g 服务器上运行的 UPDATE 语句:
UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
UPDATE Table SET Column1 = 'Two' WHERE Column2 = 'Something';
-- ...
我想检查每个UPDATE 是否只影响一行(不为零,不超过一),如果它不停止执行,则引发错误并回滚所有更新。
我希望有这样的语法:
UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
ASSERT sql%rowcount = 1;
这似乎不存在,所以也许我应该这样做:
UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
IF sql%rowcount != 1 THEN
-- Do something, but what?
END IF;
但是,我不确定在 IF 语句中放什么,或者这是否是一个好方法。那么,最优雅的实现方式是什么?
【问题讨论】:
-
RAISE_APPLICATION_ERROR (-20000,'Error');-- ? -
here类似情况,我想对你有帮助
-
如果您在“Key”上有一个唯一键,那么您只需要测试是否有任何行被更新。
-
@DavidAldridge 抱歉,列名的选择可能有点误导。
WHERE子句中有不同的内容,我不能确定匹配不超过一个。
标签: sql oracle plsql sql-update