您可以为此使用insertall
多表插入语法的副作用:
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
@H_502_5@从限制:
您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个sql语句。因此,对NEXTVAL的第一个引用将生成下一个数字,并且该语句中的所有后续引用都返回相同的数字。
显然,我在
values
子句中使用了一个序列,因此第一句话似乎不太准确。但您不能在select
零件中使用它。(我不确定100%是否可以values
在所有版本中使用它,但是该文档在任何情况下都存在误导性,并且自相矛盾)。因此,我利用了这样一个事实,因为它是一条语句,所以两个引用都
nextval
获得了相同的数字(如第三个句子所说),因此在两个表中都使用了相同的序列值。解决方法
我在Oracle中有两个表,作业和参考。
我想在两个表中插入一条新记录,并使用从序列中生成的键。就像是:
insert into ( select j.jobid,j.fileid,j.jobname,r.reffileid from job j inner join reference r on j.jobid=r.jobid) values (jobidsequence.nextval,4660,'name',4391);
当然,这导致:
ORA-01776: cannot modify more than one base table through a join view
有没有不使用PL / SQL的方法?我非常喜欢仅使用SQL来做到这一点。
insert into (
select j.jobid,j.fileid,j.jobname,r.reffileid
from job j
inner join reference r on j.jobid=r.jobid)
values (jobidsequence.nextval,4660,'name',4391);
ORA-01776: cannot modify more than one base table through a join view
从限制:
您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个sql语句。因此,对NEXTVAL的第一个引用将生成下一个数字,并且该语句中的所有后续引用都返回相同的数字。
显然,我在values
子句中使用了一个序列,因此第一句话似乎不太准确。但您不能在select
零件中使用它。(我不确定100%是否可以values
在所有版本中使用它,但是该文档在任何情况下都存在误导性,并且自相矛盾)。
因此,我利用了这样一个事实,因为它是一条语句,所以两个引用都nextval
获得了相同的数字(如第三个句子所说),因此在两个表中都使用了相同的序列值。
我在Oracle中有两个表,作业和参考。
我想在两个表中插入一条新记录,并使用从序列中生成的键。就像是:
当然,这导致:
有没有不使用PL / SQL的方法?我非常喜欢仅使用SQL来做到这一点。
从限制:
您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个sql语句。因此,对NEXTVAL的第一个引用将生成下一个数字,并且该语句中的所有后续引用都返回相同的数字。
显然,我在values
子句中使用了一个序列,因此第一句话似乎不太准确。但您不能在select
零件中使用它。(我不确定100%是否可以values
在所有版本中使用它,但是该文档在任何情况下都存在误导性,并且自相矛盾)。
因此,我利用了这样一个事实,因为它是一条语句,所以两个引用都nextval
获得了相同的数字(如第三个句子所说),因此在两个表中都使用了相同的序列值。