如何在oracle中插入,并获取插入行的ID?

时间:2012-10-22 19:41:26

标签: sql oracle

  

可能重复:
  Get ID of last inserted record in oracle db

我是oracle的新手,过去曾使用过SQL Server。我有一个存储过程,我试图一个接一个地执行两个INSERT。第二个INSERT需要第一个INSERT的ID。有人可以解释一下怎么做吗?

我看到有关SEQUENCEnextvalue/curval的内容?

我想在SQL Server中我只是声明一个变量,然后使用SCOPE_IDENTITY,所以我希望这样做。

2 个答案:

答案 0 :(得分:4)

有两种可能性。如果您使用序列进行数字生成(并且您可能是,因为Oracle没有自动数字字段,如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;

答案 1 :(得分: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来生成新的主键。