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

Nib*_*Pig 1 sql oracle

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

我对oracle还是个新手,以前用过SQL Server。我有一个存储过程,我正在尝试一个接一个地执行两次插入。第二个 INSERT 需要第一个 INSERT 的 ID。有人可以解释一下如何做吗?

我看到了有关SEQUENCEs 和nextvalue/curval?的内容

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

Gol*_*rol 5

有两种可能性。如果您使用序列进行数字生成,则可以从序列中获取值,如下所示:

select SequenceName.currval into AVariable from dual
Run Code Online (Sandbox Code Playgroud)

或这个

AVariable := SequenceName.currval;
Run Code Online (Sandbox Code Playgroud)

但最好使用returning这样的子句:

declare
  AVariable int;
begin
  insert into yourtable(columns) 
  values (values) 
  returning id into AVariable;
  
  insert into anotherTable(columns)
  values(AVariable, othervalues);
end;
Run Code Online (Sandbox Code Playgroud)

这样,无论实现细节如何,它都会起作用。你不必知道序列的名称,它也适用于后面介绍的标识列。

它唯一不起作用的是具有替代触发器的视图,但这完全是一种特殊情况。