2012-10-22 104 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以生成新的主密钥)。