2013-08-07 19 views
3

1)RETURNING INTO子句的使用比单独的SELECT语句更快吗?

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; 

我采取第二速度更快,因为它似乎需要少一个到数据库跳闸。这是真的?

+0

这是一个有趣的话题。我会说这是更快。需要编写一个小程序来测试它。但是在返回有用的地方是删除。因为你不能删除 - 选择。但是你可以删除 - 返回。 –

+1

这些替代方法在技术上并不等同。第一个可能会引发TOO_MANY_ROWS(除非'a'具有唯一约束),而第二个则不会。即使'a'是唯一标识符,第一个可能会引发NO_DATA_FOUND,而第二个则不会。 –

回答

6

正当我以为:

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

Taken from Oracle docs here

+0

谢谢T.S.我也是这么想的,但我想知道Oracle是否只是让它看起来需要一次旅行,而在幕后它只是执行SELECT INTO语句来为我们提供语法糖。 –

+0

我从来没有想过它是语法糖。我认为这就像触发器。在更改数据时,Oracle具有两个值(更新),并可以对它们执行某些操作,例如“返回”给调用者。在这种情况下,只有一个值可以返回,在有新值时删除或删除。 –

+0

请在投票批准之前更好地审查修改。 –