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

Indsættelse i to orakelborde med en sekvens

Du kan bruge en bivirkning af indsæt alle multi-table indsats syntaks for dette:

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 .

Fra begrænsningerne:

Det er klart, at jeg bruger en sekvens i værdierne klausul, så den første sætning virker ikke helt præcis; men du kan ikke bruge det i select en del. (Jeg er ikke 100 % sikker på, om det kan bruges i værdierne i alle versioner, men dokumentationen er under alle omstændigheder lidt misvisende og modsiger sig selv).

Så jeg udnytter det faktum, at fordi det er en enkelt sætning, henviser de to til nextval få det samme tal, som den tredje sætning siger, så den samme sekvensværdi bruges i begge tabeller.



  1. Forskellen mellem set, \set og \pset i psql

  2. Skal jeg ofre min innodb_buufer_pool _size/RAM for at gøre plads til query_cache_size?

  3. Opdater den samme række flere gange

  4. Hvordan kontrollerer man, om mysql-indgangen er tom i PhP?