Вам придется динамически создавать оператор INSERT.
create or replace procedure gen_insert
(p_src_table in user_tables.table_name%type
, p_no_of_rows out pls_integer)
is
col_str varchar2(16000);
begin
for rec in ( select column_name
, column_id
from user_tab_columns
where table_name = p_src_table
order by column_id )
loop
if rec.column_id != 1 then
col_str := col_str || ',' || rec.column_name;
else
col_str := rec.column_name;
end if:
end loop;
execute immediate 'insert into xyz_' || p_src_table || '('
|| col_str || ')'
|| ' select ' || col_str
|| ' from ' || p_src_table;
p_no_of_rows := sql%rowcount;
end;
/
Очевидно, вы можете включить некоторые обработки ошибок и другие улучшения.
редактировать
Отредактировав ваш вопрос, я вижу, что у вас есть специальное требование для именования целевой таблицы, которая была скрыта форматированием SO.