Bạn có thể sử dụng tác dụng phụ của insert all
chèn nhiều bảng
cú pháp cho điều này:
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
Từ những hạn chế:
Rõ ràng là tôi đang sử dụng một chuỗi trong các giá trị values
nên câu đầu tiên có vẻ không chính xác lắm; nhưng bạn không thể sử dụng nó trong select
phần. (Tôi không chắc 100% liệu nó có thể được sử dụng trong các giá trị values
không trong tất cả các phiên bản, nhưng tài liệu có một chút sai lệch trong mọi trường hợp và mâu thuẫn với chính nó).
Vì vậy, tôi đang tận dụng thực tế rằng vì nó là một câu lệnh duy nhất, hai tham chiếu đến nextval
nhận được cùng một số, như câu thứ ba nói, vì vậy giá trị trình tự giống nhau được sử dụng trong cả hai bảng.