すべて挿入
マルチテーブルインサート
このための構文:
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フィドル 。
制限から:
明らかに、 values
でシーケンスを使用しています 節なので、最初の文は正確ではないようです。ただし、 select
では使用できません 部。 ( values
で使用できるかどうかは100%わかりません。 すべてのバージョンで使用できますが、ドキュメントはいずれにせよ少し誤解を招きやすく、矛盾しています。
したがって、これは単一のステートメントであるため、 nextval
への2つの参照であるという事実を利用しています。 3番目の文にあるように、同じ番号を取得するため、両方のテーブルで同じシーケンス値が使用されます。