SQL 在 BEGIN 和 END 内更新

SQL UPDATE within BEGIN and END

我需要更新 big table (ACCOUNTS) 并根据自身更改列。

如何做到这一点?

这个查询:

begin
UPDATE ACCOUNTS SET ACC = '1' where ACC IN ('3');
UPDATE ACCOUNTS SET ACC = '2' where ACC IN ('4');
end

只更新 4 到 2。

对于较大的表,最好只执行 一次更新

您可以按如下方式将两个更新合并为一个:

select * from ACCOUNTS;

A
-
1
2
3
4


BEGIN
  update ACCOUNTS
  set ACC = case when ACC = '3' then '1'
                 when ACC = '4' then '2' end
  where ACC in ('3','4'); 
  dbms_output.put_line('rows updated '  || SQL%ROWCOUNT);
END;
/

rows updated 2

select * from ACCOUNTS;

A
-
1
2
1
2

别忘了COMMIT