我是oracle的新手,过去曾使用过SQL Server。我有一个存储过程,我试图一个接一个地执行两个INSERT。第二个INSERT需要第一个INSERT的ID。有人可以解释一下怎么做吗?
我看到有关SEQUENCE
和nextvalue/curval
的内容?
我想在SQL Server中我只是声明一个变量,然后使用SCOPE_IDENTITY
,所以我希望这样做。
答案 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
来生成新的主键。