有PL/SQL代码:
for elem in 1 .. some_array.count loop
UPDATE my_table
SET name = null
WHERE id = some_array(elem).id;
end loop;
name在这里,如果此行some_array存在,则循环中的字段设置为零。id
如何更优雅地做到这一点,一两行?
同时,rollback如果出现问题(对于任何错误),是否回滚()?
有PL/SQL代码:
for elem in 1 .. some_array.count loop
UPDATE my_table
SET name = null
WHERE id = some_array(elem).id;
end loop;
name在这里,如果此行some_array存在,则循环中的字段设置为零。id
如何更优雅地做到这一点,一两行?
同时,rollback如果出现问题(对于任何错误),是否回滚()?
像这样的地方,更新的第二行,如果在一行,那么你将不得不滚动:
在这种情况下,
rollback不需要它,因为除了单个的任何异常之外update,不会更改任何行,即 如果修改了 999 行,并且第 1000 行发生异常,则当前行所做的所有更改update都将隐式回滚。通常,在这种情况下,日志记录
raise就足够了,调用者决定是否回滚整个事务,重试它,或者在极少数情况下以commit.如果您仍然需要忽略单个异常,就像在循环中可能的那样,那么您需要添加
update构造log errors。例如:在这种情况下,此过程应根据业务逻辑以编程方式决定是否回滚。如果是,则
savepoint updItems; <логика ...> rollback to updItems;, 或将异常传递给调用程序: