使用 INSERT table (A) 的返回值到另一个 table (B)
Use a returning value from an INSERT table (A) into another table (B)
我需要使用TableA的返回值(ID)作为参数插入到TableB中:
insert into tableA (ID, Name , Address)
values (GEN_ID(GENERATOR,1),'John','123 street')
returning ID
--Example: ID=159
insert into tableB (ID, TABLE_A_FK )
values (GEN_ID(GENERATOR,1), 159)
我可以不输入实际值159,而是像变量一样创建(例如declare ID int;
),然后只传递参数吗?
在单个语句中执行此操作的唯一方法是使用 EXECUTE BLOCK
(基本上是匿名 one-off 过程)。它使用与 Firebird 中的普通存储过程相同的语法。
你可以这样做:
execute block
as
declare id integer;
begin
insert into tableA (ID, Name , Address)
values (GEN_ID(GENERATOR,1), 'John', '123 street')
returning ID
into id;
insert into tableB (ID, TABLE_A_FK)
values (GEN_ID(GENERATOR,1), :id);
end
如有必要,execute block
语句可以参数化,因此您可以使用参数来提供值(而不是对它们进行硬编码)。有关详细信息,请参阅上面的 link。
我需要使用TableA的返回值(ID)作为参数插入到TableB中:
insert into tableA (ID, Name , Address)
values (GEN_ID(GENERATOR,1),'John','123 street')
returning ID
--Example: ID=159
insert into tableB (ID, TABLE_A_FK )
values (GEN_ID(GENERATOR,1), 159)
我可以不输入实际值159,而是像变量一样创建(例如declare ID int;
),然后只传递参数吗?
在单个语句中执行此操作的唯一方法是使用 EXECUTE BLOCK
(基本上是匿名 one-off 过程)。它使用与 Firebird 中的普通存储过程相同的语法。
你可以这样做:
execute block
as
declare id integer;
begin
insert into tableA (ID, Name , Address)
values (GEN_ID(GENERATOR,1), 'John', '123 street')
returning ID
into id;
insert into tableB (ID, TABLE_A_FK)
values (GEN_ID(GENERATOR,1), :id);
end
如有必要,execute block
语句可以参数化,因此您可以使用参数来提供值(而不是对它们进行硬编码)。有关详细信息,请参阅上面的 link。