1)

update foo set bar = bar + 1 where a = 123;
select bar into var from foo where a = 123;

2)
update foo set bar = bar + 1 where a = 123 RETURNING bar into var;

我认为第二个更快,因为它似乎需要少一趟数据库。这是真的?

最佳答案

正如我所预料的那样:

通常,应用程序需要有关受SQL操作影响的行的信息,例如,生成报告或采取后续措施。 INSERT,UPDATE和DELETE语句可以包含RETURNING子句,该子句将受影响的行中的列值返回到PL / SQL变量或主机变量中。这消除了在插入或更新之后或删除之前选择SELECT的行。结果,需要更少的网络往返,更少的服务器CPU时间,更少的游标和更少的服务器内存。

Taken from Oracle docs here

09-10 07:59
查看更多