Vous pouvez utiliser returning into
clause de l'insert
instruction pour retourner users_id
valeur après qu'un nouvel enregistrement a été inséré dans table1
. Vous pouvez également utiliser user_seq.currval
pour obtenir la valeur actuelle de la séquence. Voici un exemple (Dans cet exemple, une procédure stockée simple a été implémentée pour démontrer l'utilisation de insert into
clause. Vous pouvez implémenter une procédure stockée similaire selon vos besoins) :
SQL> create table Tb_table_1(
2 user_id number primary key,
3 field_1 number
4 );
Table created
SQL>
SQL> create table Tb_table_2(
2 user_id number references tb_table_1(user_id),
3 name1 varchar2(17)
4 );
Table created
SQL> create sequence user_seq
2 start with 1
3 increment by 1
4 nomaxvalue;
Sequence created
SQL>
SQL> create trigger user_trigger
2 before insert on tb_table_1
3 for each row
4 begin
5 select user_seq.nextval into :new.user_id from dual;
6 end;
7 /
Trigger created
SQL> create or replace procedure Insert_Record
2 is
3 l_cur_id number;
4 begin
5 insert into Tb_table_1(Field_1)
6 values(123)
7 returning user_id into l_cur_id; -- store user_id of the new inserted record
8 for i in 1..5 -- in a local variable for later use
9 loop
10 insert into tb_table_2(user_id, name1) -- insert a bunch of sample data into table2 using previously stored user_id.
11 values(l_cur_id, dbms_random.string('l', 7));
12 end loop
13 commit;
14 end;
15 /
Procedure created
SQL> select * from tb_table_1;
USER_ID FIELD_1
---------- ----------
SQL> select * from tb_table_2;
USER_ID NAME1
---------- -----------------
SQL> exec insert_record;
PL/SQL procedure successfully completed
SQL> select * from tb_table_1
2 ;
USER_ID FIELD_1
---------- ----------
1 123
SQL> select * from tb_table_2;
USER_ID NAME1
---------- -----------------
1 jzsdbna
1 ozbibgs
1 btxrxcm
1 hxwwpzc
1 sdjbwzi
SQL>
À partir d'Oracle 11g, vous pouvez affecter directement une valeur de séquence à une variable :
:new.users_id := user_seq.nextval;