sql >> Base de Datos >  >> RDS >> Oracle

Insertar en dos tablas de Oracle con una secuencia

Puede utilizar un efecto secundario del insert all inserto multimesa sintaxis para esto:

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 .

De las restricciones:

Claramente estoy usando una secuencia en los values cláusula, por lo que la primera oración no parece muy precisa; pero no puedes usarlo en el select parte. (No estoy 100% seguro de si se puede usar en los values en todas las versiones, pero la documentación es un poco engañosa en cualquier caso y se contradice a sí misma).

Entonces aprovecho el hecho de que debido a que es una declaración única, las dos referencias a nextval obtenga el mismo número, como dice la tercera oración, por lo que se usa el mismo valor de secuencia en ambas tablas.