Vous pouvez utiliser un effet secondaire du insert all insert multitable
syntaxe pour ceci :
insert all
into job (jobid, fileid, jobname)
values (jobidsequence.nextval, fileid, jobname)
into reference (jobid, reffileid)
values (jobidsequence.nextval, reffileid)
select 4660 as fileid, 'name' as jobname, 4391 as reffileid
from dual;
2 rows inserted.
select * from job;
JOBID FILEID JOBNAME
---------- ---------- ----------
42 4660 name
select * from reference;
JOBID REFFILEID
---------- ----------
42 4391
Parmi les restrictions :
J'utilise clairement une séquence dans les values clause, donc la première phrase ne semble pas tout à fait exacte ; mais vous ne pouvez pas l'utiliser dans le select partie. (Je ne suis pas sûr à 100 % s'il peut être utilisé dans les values dans toutes les versions, mais la documentation est de toute façon un peu trompeuse, et se contredit).
Je profite donc du fait que, comme il s'agit d'une seule instruction, les deux références à nextval obtenez le même nombre, comme le dit la troisième phrase, donc la même valeur de séquence est utilisée dans les deux tables.