1

可能重复:
获取oracle db中最后插入记录的ID

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

我看到了关于SEQUENCEs 和nextvalue/curval?

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

4

2 回答 2

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;
于 2012-10-22T19:46:15.050 回答
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生成新的主键)。

于 2012-10-22T19:47:25.053 回答