If there are no foreign keys between the tables you're inserting into, you can do this in a single insert all statement. (An insert all statement may fail due to foreign key constraint violations, as it doesn't guarantee the order of the tables it will insert into.)
First off, you can write your select statements into a single query such as:
WITH t1 AS (SELECT 'a' col1, 'b' col2, 'c' col3, 10 col10, 11 col11, 12 col12 FROM dual UNION ALL
SELECT 'aa' col1, 'bb' col2, 'cc' col3, 20 col10, 21 col11, 22 col12 FROM dual UNION ALL
SELECT 'aaa' col1, 'b' col2, 'cc' col3, 30 col10, 31 col11, 42 col12 FROM dual),
t2 AS (SELECT 'a' col1, 'b' col2, 'c' col3, 100 col10, 111 col11, 122 col12 FROM dual UNION ALL
SELECT 'a' col1, 'bb' col2, 'cc' col3, 200 col10, 211 col11, 222 col12 FROM dual UNION ALL
SELECT 'a' col1, 'b' col2, 'cc' col3, 300 col10, 311 col11, 422 col12 FROM dual),
a AS (SELECT 't1' table_name, col1, col2, col3, col10, col11, col12 FROM t1
UNION ALL
SELECT 't2' table_name, col1, col2, col3, col10, col11, col12 FROM t2),
dummy AS (SELECT LEVEL id
FROM dual
CONNECT BY LEVEL <= 3)
SELECT table_name,
CASE WHEN d.id = 1 THEN 'col1'
WHEN d.id = 2 THEN 'col2'
WHEN d.id = 3 THEN 'col3'
END main_col,
CASE WHEN d.id = 1 THEN col1
WHEN d.id = 2 THEN col2
WHEN d.id = 3 THEN col3
END main_col_vals,
SUM(CASE WHEN d.id = 1 THEN col10
WHEN d.id = 2 THEN col11
WHEN d.id = 3 THEN col12
END) sum_vals
FROM a
CROSS JOIN dummy d
GROUP BY table_name,
CASE WHEN d.id = 1 THEN 'col1'
WHEN d.id = 2 THEN 'col2'
WHEN d.id = 3 THEN 'col3'
END,
CASE WHEN d.id = 1 THEN col1
WHEN d.id = 2 THEN col2
WHEN d.id = 3 THEN col3
END
ORDER BY table_name,
main_col,
main_col_vals;
This uses the old-style method of pivoting to pivot all the values from all the tables in one go, labeling the rows with the appropriate table_name.
Then it's just a matter of adding that into an insert all statement, e.g.:
insert all
when table_name = 't1' then into
another_t1 (cola, val) values (main_col_vals, sum_vals)
when table_name = 't2' then into
another_t2 (cola, val) values (main_col_vals, sum_vals)
WITH a AS (SELECT 't1' table_name, col1, col2, col3, col10, col11, col12 FROM t1
UNION ALL
SELECT 't2' table_name, col1, col2, col3, col10, col11, col12 FROM t2),
dummy AS (SELECT LEVEL id
FROM dual
CONNECT BY LEVEL <= 3)
SELECT table_name,
CASE WHEN d.id = 1 THEN 'col1'
WHEN d.id = 2 THEN 'col2'
WHEN d.id = 3 THEN 'col3'
END main_col,
CASE WHEN d.id = 1 THEN col1
WHEN d.id = 2 THEN col2
WHEN d.id = 3 THEN col3
END main_col_vals,
SUM(CASE WHEN d.id = 1 THEN col10
WHEN d.id = 2 THEN col11
WHEN d.id = 3 THEN col12
END) sum_vals
FROM a
CROSS JOIN dummy d
GROUP BY table_name,
CASE WHEN d.id = 1 THEN 'col1'
WHEN d.id = 2 THEN 'col2'
WHEN d.id = 3 THEN 'col3'
END,
CASE WHEN d.id = 1 THEN col1
WHEN d.id = 2 THEN col2
WHEN d.id = 3 THEN col3
END;
Here's the test case.