首页 > 解决方案 > 为 Oracle 插入循环

问题描述

我需要一个解决mi问题的方法。它不一定是一个循环,我很感谢每个输入。

我有一个包含 262 个条目的表。我们称之为EXPTB1。我有第二个表EXPTB2,它是空的。

现在对于 EXPTB1 中的每个条目,我需要 EXPTB2 中的 6 个条目。并且必须填写三个属性。一种是主键,由序列自动生成。一个是 EXPTB1 条目的外键,一个包含六个不同的数字(位置),用于 6 个条目中的每一个。数字将始终为 1、2、3、11、12、13。

因此,我们查看 EXPTB1 的单个条目,我需要为每个 ist 对象执行以下查询:

insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,1);
insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,2);
insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,3);
insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,11);
insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,12);
insert into EXPTB2(EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION) values (EXPTB2_SEQ.nextval,EXPTB1_ID,13);

结果图片

  1. 行号
  2. 主键 - 按序列创建
  3. EXPTB1 中条目的外键
  4. 位置

我希望我的描述足够清楚,描述起来有点困难.. :)

干杯费边

标签: sqloracleloopssql-insert

解决方案


您可以CROSS JOIN使用包含值的表集合表达式:

INSERT INTO EXPTB2( EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION )
SELECT EXPTB2_SEQ.nextval,
       EXPTB1_ID,
       t.COLUMN_VALUE
FROM   EXPTB1
       CROSS JOIN
       TABLE( SYS.ODCINUMBERLIST( 1, 2, 3, 11, 12, 13 ) ) t;

推荐阅读