2017-09-14 43 views
0

我們有我們需要添加一個自動遞增觸發(以及其他一些失敗保險櫃)Oracle序列或選擇MAX()在自動遞增字段中?

幾個表對我們來說,最簡單的辦法是使用所有表的一個共同的過程中,使用選擇MAX()獲得下一個遞增值。

或者開發一個有點複雜的循環來爲每個表創建一個序列和自定義觸發器。

我們希望能找到最簡單的方法,但我不確定是否需要比使用序列更多的處理,這種差異會有多大,以及如何計算。

基本上,Select MAX(my_field)my_sequence.nextval()相比有多慢?

回答

3

您可能應該使用一個序列,因爲它們比從表格中選擇要快得多。

從表中選擇max()的問題是,如果您一次有多個會話,則它們都可以獲得相同的最大值,然後向其中添加一個,並使用相同的假定唯一值。我無法真正想到你想要選擇max()來獲得下一個值的原因。

序列速度很快,您可以保證不會在多個會話中使用相同的值。

鮑比

2

這是太長的評論。

如果您要在Oracle 12C之前在Oracle中創建順序標識,請使用序列和觸發器。 Here是一個代碼示例。這並不難。它比計算更有效率。它沒有競爭條件。

在Oracle 12C中,使用GENERATED ALWAYS AS IDENTITY列。根本不需要觸發器。

+0

對不起,我忘了標籤作爲11g中,我在12C充分認識到這一新功能的^^ – Mojimi