1

我有下表 table_1 包含数千行:

Num_replication   object_name
--------------------------------
       4             obj_1
       8             obj_2
      12             obj_3

对于这些行中的每一行,我需要在其他表中插入行。

例如,我必须在 table_2 中为 table_1 中的每一行插入一行:

ID       obj_name
------------------
1         obj_1
2         obj_2
3         obj_3

在 table_3 中,我必须根据 num_replication 插入行数,如下所示:

ID       port
--------------
1        P0001
1        P0002
1        P0003
1        P0004
2        P0001
2        P0002
2        P0003
2        P0004
2        P0005
2        P0006
2        P0007
2        P0008

其他行也是如此。

我知道我可以使用 loops 来完成此操作,但我需要在没有 loops 的情况下使用多个插入来完成此操作。

任何帮助,将不胜感激。

4

1 回答 1

4

使用分层查询将行相乘,然后有条件insert alldense_rank生成 id:

insert all
  when column_value = 1 then
    into table_2(id, obj_name) values (rn, object_name) 
  when 1 = 1 then
    into table_3(id, port) values(rn, port)
select dense_rank() over (order by object_name) rn, t.object_name, 
       column_value, 'P'||lpad(column_value, 4, '0') port
  from table_1 t, 
  table(cast(multiset(select level 
                        from dual 
                        connect by level <= t.num_replication) 
             as sys.odcinumberlist));

dbfiddle 演示

于 2020-03-10T11:05:22.430 回答