2016-03-10 34 views
0

我正在使用一個具有插入觸發器的oracle表,該插入觸發器從序列中提取下一個值並將其用作主鍵ID。如何獲取插入到oracle中的最後一行的標識

我無法更改數據庫,所以我想知道是否有方法從新插入的行中檢索指定的ID。

如果只有一個用戶,選擇max(id)就可以工作,但事實並非如此。

有沒有辦法做到這一點?

版本:

NLSRTL         11.2.0.3.0 Production 
Oracle Database 11g Enterprise Edition 11.2.0.3.0 64bit Production 
PL/SQL         11.2.0.3.0 Production 
TNS for Linux:       11.2.0.3.0 Production 
+0

https://community.oracle.com/thread/334501?tstart=0 –

+0

你想要的當前值序列?如果是,並且您正在使用PL/SQL Developer,則可以在Sequences下的Object瀏覽器中對其進行檢查。如果您不是,請參閱該主題:https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4245421000346226872 – Thomas

+0

該表是否包含日期/時間戳列這是設置插入,你可以用它來確定最後一行? – MT0

回答

2

一些選項: 如果有一個自然鍵去與你生成的ID(您插入包含一個獨特的鍵列),然後用這些鍵值選擇該行會工作。

可以在插入語句上使用RETURNING子句來返回ID列值,但是在所有中間件連接中都不支持。

如果觸發器檢查是否已經在插入時設置了id字段,並且僅在您傳遞該列的null值時才提取sequence.nextvalue,那麼執行ID序列獲取並將其包含在你的插入語句。

如果該表是使用審計列(created_user/created_Date排序的事情)設置的,那麼您始終可以選擇最後插入的行。

+0

不錯的選擇 - 我會檢查出來 – Graham

2

可以使用sequence pseudocolumnCURRVAL來獲取序列的當前值:

SELECT sequence_name.CURRVAL 
FROM DUAL; 
+0

這不會工作,如果另一個用戶插入一行和插入之間 – Graham

+0

問題是「如何獲取最後一行插入到oracle中」如果你打算得到最後一行由特定用戶插入或在特定操作中插入,那麼您可能需要在問題中說明這一點。 – MT0

+0

@格拉漢姆,事實並非如此。 'currval'返回當前會話*的最近序列值*。它永遠不會返回在其他會話中檢索到的值。 –

相關問題