2012-10-22 99 views
1

可能重複:
Get ID of last inserted record in oracle db如何在oracle中插入,並獲取插入行的ID?

我全新的Oracle公司表示,已經使用了SQL Server中的過去。我有一個存儲過程,我試圖一個接一個地執行兩個INSERT。第二個INSERT需要第一個INSERT的ID。有人可以解釋如何做到這一點?

我看到有關SEQUENCE s和nextvalue/curval的東西?

我想在SQL Server中我只是聲明一個變量,並使用SCOPE_IDENTITY,所以我會尋找這樣做。

+0

看起來正確的,但我不知道如何來聲明一個變量,除了在過程聲明。 – NibblyPig

+0

聽起來沒錯。你嘗試過嗎? – Gerrat

回答

4

有兩種可能性。如果您使用的序列號生成(你可能是,因爲Oracle沒有自動NUM領域,例如MySQL),你可以從序列中獲得的價值,就像這樣:

select SequenceName.currval into AVariable from dual 

其他選項是使用這樣的returning子句:

declare 
    AVariable int; 
begin 
    insert into yourtable(columns) 
    values (values) 
    returning id into AVariable; 

    insert into anotherTable(columns) 
    values(AVariable, othervalues); 
end; 
+0

謝謝,這應該工作。 – NibblyPig

0

有幾種方法。一種選擇是使用RETURNING條款,即

DECLARE 
    l_generated_id INTEGER; 
BEGIN 
    INSERT INTO table_name(<<column list>>) 
    VALUES(<<values list>> 
    RETURNING <<name of primary key column>> 
     INTO l_generated_id; 
    INSERT INTO other_table(<<column list>>) 
    VALUES(l_generated_id, <<other values>>); 
END; 

如果您知道主鍵是通過序列(有或沒有觸發器)填充,你知道該序列的名稱,你可以使用sequence_name.currval在第二INSERT語句(第一INSERT語句將直接或者經由觸發器引用sequence_name.nextval以生成新的主密鑰)。