当前位置: 首页 > 面试题库 >

按顺序插入两个Oracle表

郑燕七
2023-03-14
问题内容

我在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来做到这一点。


问题答案:

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

SQL小提琴。

从限制:

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

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

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



 类似资料:
  • 问题内容: 如何以以下方式将值插入表(MySQL): 在表的所有行上,按ID列(PK)的顺序,在“ num”列中插入递增数字? 例如,如果表有3行,其ID为1,5,2,我希望ID 1获得num = 1,ID 2获得num = 2,ID 5获得num = 3。 编辑 我将解释为什么(我认为)需要这样做: 我试图将表中的列拆分为具有1对1关系的单独表。我以为我可以按ID的顺序获取所有值,然后将它们插入

  • 我正试图按排序的顺序将一个元素添加到数组中。 5、6、7、9、11、0

  • 问题内容: 要将数据从一个数据库复制到具有相同架构的不同服务器中的另一个数据库,我计划使用C Sharp库中的SqlBulkCopy类。插入记录时,SqlBulkCopy是否将保持与数据表中相同的顺序? 示例:id是标识列。 服务器1,db1 服务器2,db1 步骤1: 步骤2:将SQL批量复制到server2 第3步:由于我们知道插入的记录数,因此我使用的是“前4名”。 第4步: 问题: res

  • 我的任务是创建函数来添加和删除链表中的节点,输入数据为int,字符为with函数调用。我不确定我做错了什么。我得到的唯一错误是:退出时返回代码为-11(SIGSEGV)。还有一个编译器方法:main。cpp:在函数“void listInsertValue(ListNode)”中* 感谢任何帮助。谢谢!

  • 清单插入(5);插入(10);插入(8);插入(20);插入(6); 如果现在打印列表,它应该打印为: 5

  • 问题内容: 我正在使用Informix(版本7.32)数据库。在一项操作中,我创建了一个临时表,其中包含常规表的ID和一个串行列(因此,我将从常规表中获得的所有ID进行连续编号)。但是我想从ID排序的常规表中插入信息,例如: 但这会产生语法错误(由于ORDER BY) 有什么方法可以订购信息,然后将其插入到tempTable中? 更新:我要这样做的原因是因为常规表中有大约10,000个项目,并且在