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 all
,dense_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));
我有以下 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 all
,dense_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));