当前位置:  开发笔记 > 数据库 > 正文

在循环中更新数据库记录?

如何解决《在循环中更新数据库记录?》经验,为你挑选了4个好方法。

删除该代码,只需使用:

update emp set sal = 13000 where sal = 1300


Erich Kitzmu.. 11

每当您使用一个语句进行更新时,您应该这样做而不是使用循环.你将获得非常巨大的性能提升; 或者反过来说,循环中的更新会让您失去很多性能.

如果你真的必须使用一个循环,当然你需要一个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;

另一种可能性是使用显式游标和"更新...当前的cursorname "语法.



1> Sergio..:

删除该代码,只需使用:

update emp set sal = 13000 where sal = 1300



2> Erich Kitzmu..:

每当您使用一个语句进行更新时,您应该这样做而不是使用循环.你将获得非常巨大的性能提升; 或者反过来说,循环中的更新会让您失去很多性能.

如果你真的必须使用一个循环,当然你需要一个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;

另一种可能性是使用显式游标和"更新...当前的cursorname "语法.



3> Andrzej Doyl..:

您需要在更新语句上设置约束.

你现在拥有的东西将循环遍历结果行,如果它找到一个工资等于1300的行,那么如果然后执行他跟随SQL:

update emp 
set sal=13000;

没有约束,这会更新每一行.



4> Quassnoi..:

此代码使用工资13000更新所有记录.相反,我想将工资1300的记录更新为值13000.

对于每条记录,我正在检查该记录的sal值.如果特定记录中的工资值为1500,我想将其更新为15000 ..

那你究竟想要什么?

您只想更新1,500工资,您发出:

UPDATE emp
SET sal = 15000
WHERE sal = 1500;

你想要增加所有工资十倍,你发出:

UPDATE emp
SET sal = sal * 10;

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有