温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - Updating database records in a loop?

sql - 循环更新数据库记录?

发布于 2020-03-28 23:22:40
declare
begin
  for i in (select * from emp)
  loop
    if i.sal=1300 then
      update emp
      set sal=13000;
    end if;
  end loop;
end;

这段代码正在更新薪水为13000的所有记录。
相反,我想将薪水为1300的记录更新为值13000。
您能告诉我我在哪里出错吗?
我正在使用隐式游标访问记录..
对于每个记录,我正在检查该记录的sal值..
如果特定记录中的薪水值是1500,我想将其更新为15000。

查看更多

查看更多

提问者
musicking123
被浏览
45
Erich Kitzmueller 2009-02-19 20:41

只要您可以使用一条语句进行更新,就应该这样做,而不要使用循环。这样,您将获得巨大的性能提升。或者反过来,循环更新会浪费很多性能。

如果确实需要使用循环,那么当然需要一个where条件,以确保仅更新您真正想要更新的记录。始终有效的一种可能方法(即使没有可用的唯一键)是使用rowid伪列:

begin
  for i in (select rowid, emp.* from emp)
  loop
    if i.sal=1300 then
      update emp
      set sal=13000
      where rowid=i.rowid;
    end if;
  end loop;
end;

另一种可能是使用显式游标和“ update ... where current of cursorname ”语法。