您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

按顺序插入两个Oracle表

按顺序插入两个Oracle表

您可以为此使用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小提琴

从限制:

您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个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小提琴

从限制:

您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个sql语句。因此,对NEXTVAL的第一个引用将生成一个数字,并且该语句中的所有后续引用都返回相同的数字。

显然,我在values子句中使用了一个序列,因此第一句话似乎不太准确。但您不能在select零件中使用它。(我不确定100%是否可以values在所有版本中使用它,但是该文档在任何情况下都存在误导性,并且自相矛盾)。

因此,我利用了这样一个事实,因为它是一条语句,所以两个引用都nextval获得了相同的数字(如第三个句子所说),因此在两个表中都使用了相同的序列值。

我在Oracle中有两个表,作业和参考。

我想在两个表中插入一条新记录,并使用从序列中生成的键。就像是:

当然,这导致:

有没有不使用PL / SQL的方法?我非常喜欢仅使用SQL来做到这一点。

SQL小提琴

从限制:

您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个sql语句。因此,对NEXTVAL的第一个引用将生成一个数字,并且该语句中的所有后续引用都返回相同的数字。

显然,我在values子句中使用了一个序列,因此第一句话似乎不太准确。但您不能在select零件中使用它。(我不确定100%是否可以values在所有版本中使用它,但是该文档在任何情况下都存在误导性,并且自相矛盾)。

因此,我利用了这样一个事实,因为它是一条语句,所以两个引用都nextval获得了相同的数字(如第三个句子所说),因此在两个表中都使用了相同的序列值。

Oracle 2022/1/1 18:36:58 有442人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶