2013-08-07 20 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

請在投票批准之前更好地審查修改。 –