【问题标题】:SQL UPDATE within BEGIN and ENDBEGIN 和 END 中的 SQL UPDATE
【发布时间】:2019-05-18 23:00:55
【问题描述】:

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

如何做到这一点?

这个查询:

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

仅更新 4 至 2。

【问题讨论】:

  • 您能否为您的问题添加更多信息?为什么只会执行第二次更新?
  • 我不好这个脚本也可以工作,但是我在光标第二次更新时提交了它,而不是在“开始”

标签: sql oracle plsql sql-update toad


【解决方案1】:

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

您可以将两个更新合二为一,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多