Oracle
 sql >> Database >  >> RDS >> Oracle

Inserimento in due tabelle Oracle con una sequenza

Puoi utilizzare un effetto collaterale del insert all inserto multitavolo sintassi per questo:

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 .

Dalle restrizioni:

Chiaramente sto usando una sequenza nei values clausola, quindi la prima frase non sembra abbastanza accurata; ma non puoi usarlo nella select parte. (Non sono sicuro al 100% se può essere utilizzato nei values in tutte le versioni, ma la documentazione è comunque un po' fuorviante e si contraddice).

Quindi sto approfittando del fatto che, poiché si tratta di una singola istruzione, i due riferimenti a nextval ottenere lo stesso numero, come dice la terza frase, quindi lo stesso valore di sequenza viene utilizzato in entrambe le tabelle.