Поскольку вы используете версию Oracle DB 12c, то можете использовать Identity Column Property
. Затем легко вернуть значение первой таблицы ( table1 ) в локальную переменную, взимая предложение returning
сразу после оператора вставки для table1 , и использовать внутри следующего оператора вставки, который для table2 , как указано ниже:
SQL> create table table1(
2 ID integer generated always as identity primary key,
3 food varchar2(50), drink varchar2(50), shoe varchar2(50)
4 );
SQL> create table table2(
2 fkey integer references table1(ID),
3 color varchar2(50)
4 );
SQL> declare
2 cl_tab table1.id%type;
3 begin
4 insert into table1(food,drink,shoe) values('apple','water','slippers' )
5 returning id into cl_tab;
6 insert into table2 values(cl_tab,'blue');
7 end;
8 /
SQL> select * from table1;
ID FOOD DRINK SHOE
-- ------- ------- -------
1 apple water slippers
SQL> select * from table2;
FKEY COLOR
---- --------------------------------------------------
1 blue
Каждый раз, когда вы вводите вышеприведенный оператор для вставок между begin и end , оба столбца table1.ID
и table2.fkey
будут заполнены одинаковыми целочисленными значениями. Кстати, не забудьте зафиксировать изменения путем вставки, если вам нужны эти значения во всей БД (например, из других сессий).