Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserindo em duas tabelas oracle com uma sequência


Você pode usar um efeito colateral do insert all inserção de várias tabelas sintaxe para isso:
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 .

Das restrições:

Claramente estou usando uma sequência nos values cláusula, então a primeira frase não parece muito precisa; mas você não pode usá-lo no select papel. (Não tenho 100% de certeza se pode ser usado nos values em todas as versões, mas a documentação é um pouco enganosa em qualquer caso e se contradiz).

Então, estou aproveitando o fato de que, por ser uma única instrução, as duas referências a nextval obter o mesmo número, como diz a terceira frase, então o mesmo valor de sequência é usado em ambas as tabelas.