Insert LOOP for Oracle



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

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

现在,对于 EXPTB1 中的每个条目,我需要 6 个 EXPTB2 条目。并且必须填写三个属性。一个是主键,它由序列自动生成。一个是 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. 位置

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

干杯 法比安

试试这个:

insert into EXPTB2 (EXPTB2_ID,EXPTB2_EXPTB1_ID,EXPTB2_POSITION)
with positions (pos) as
( select 1 from dual union all
select 2 from dual union all
select 3 from dual union all
select 11 from dual union all
select 12 from dual union all
select 13 from dual )
select EXPTB2_SEQ.nextval, EXPTB1_ID, positions.pos
from   EXPTB1
cross join positions;

with子句创建一个虚拟表 POSITION,其中包含 6 行,其中包含所需的值。 然后与源表交叉联接,为每个源表行生成 6 个新行。

您可以使用包含以下值的表集合表达式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;

最新更新