Oracle/没有循环的多个插入

Oracle/ multiple inserts without Loops

我有以下 table table_1 其中包含数千行:

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

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

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

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

其他行也一样。

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

如有任何帮助,我们将不胜感激。

使用分层查询对行进行乘法运算,然后使用条件查询 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 demo