Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Einfügen in zwei Orakeltabellen mit einer Sequenz

Sie können einen Nebeneffekt des Codes alle einfügen Mehrtabelleneinsatz Syntax dafür:

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-Geige .

Von den Beschränkungen:

Offensichtlich verwende ich eine Sequenz in den values Klausel, daher scheint der erste Satz nicht ganz genau zu sein; aber Sie können es nicht im select verwenden Teil. (Ich bin mir nicht 100 % sicher, ob es in den values verwendet werden kann in allen Versionen, aber die Dokumentation ist sowieso etwas irreführend und widerspricht sich).

Ich nutze also die Tatsache aus, dass, weil es sich um eine einzelne Anweisung handelt, die beiden Verweise auf nextval dieselbe Nummer erhalten, wie der dritte Satz sagt, also wird in beiden Tabellen derselbe Sequenzwert verwendet.