Oracle
 sql >> Base de données >  >> RDS >> Oracle

Insertion dans deux tables oracle avec une séquence

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 

SQL Fiddle .

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.