我的数据库中有3个表,它们的架构类似于
Table1 (Col1 Pk, Col2),
Table2 (Col3 Pk, Col1 FK, Col4)
Table3 (Col5 Pk, Col3 FK, Col6)
此处,主键列的值在每次插入操作时都会自动递增。 我想在上面的表中插入值。在上述情况下,除非我具有Col3的值(表2的外键),否则我无法插入到Table3中,同样地,除非我具有Col1的值(表1的外键)也不会插入到表2中。
问题: 如何在单个数据库连接中插入以上表?
我总是可以进行3次不同的调用并插入值,但是如何使用Table1中的值并将其插入到Table2中,同样如何使用Table2中的值并将其插入到单连接中的Table3中呢?
我想写一个存储过程,但是不确定如何获取Col1值并将其插入到Table2中。
请在这里提出一些想法。一个例子也有帮助。
谢谢。
答案 0 :(得分:2)
我认为,您正在寻找这个。只需使用Returning
来检索PK值,然后在下一次插入时使用该值
declare
v_col1_id number(10) := null;
v_col3_id number(10) := null;
begin
insert into T1 (col2) values ('xxx') RETURNING col1 INTO v_col1_id; -- col1 - PK
insert into T2 (col1, col4) values (v_col1_id, 'yyy') RETURNING col3 INTO v_col3_id; -- col3 - PK
insert into T3 (col3, col6) values (v_col3_id , 'zzz'); -- col5 - PK
end;
/