2017-07-02 99 views
1

我知道在INSERT語句中使用RETURNING,但需要一種方法來使其作爲INSERT語句(或包含事務)的結果返回,或者能夠檢索該值使用SELECT。有沒有辦法做到這一點?我無法使用DBMS_OUTPUT。謝謝!在Oracle中插入INSERT後選擇最後一個ID

回答

2

RETURNING子句是保證的最簡單方法獲取由INSERT語句生成的ID的值。在多用戶環境中查詢max(id)是不可靠的,尤其是在您使用RAC的情況下。

select your_sequence.currval from dual; 

這意味着你需要知道的名字:

如果ID是從一個序列填充您可以在同一會話的INSERT運行此得到序列的當前值如果您使用12c標識列,那麼序列並不總是顯而易見的。

基本上,如果你想ID使用RETURNING。

+0

謝謝,愚蠢的問題在這裏...我如何意識到序列? – joelc

+0

這就是業務邏輯。除非您使用Oracle 12c Identity列,否則數據字典在序列和主鍵之間沒有聯繫。你需要檢查你的應用程序邏輯--PL/SQL API,觸發器等。[這個答案可能會給你一個出發點](https://stackoverflow.com/a/2363311/146325) – APC

+0

@APC你沒有'不要提到來自DUAL的查詢可能會返回INSERT未使用的值(例如,併發進程執行類似的操作)。所需要的是兩個併發進程從序列中獲取nextval。我同意你的最終陳述,但是你並沒有把併發問題掛起。 – jeff6times7