I will give you an approach that could lead you to the solution. This code is really not tested because right now I don't have the time to do it, but I hope it can help you...
1) Create a cursor like this:
declare v_table_name varchar2(30) := 'HIST';
cursor cur is select column_name, data_type
from all_tab_columns
where table_name = v_table_name
and column_name != 'COL1'
order by column_id;
There you can get all the current columns of the table HINT that, of course, will take in consideration any alter table you do.
2) You must fetch that cursor and create a dynamic insert statement. Something like this:
declare v_column_list varchar2(500);
declare v_values_list varchar2(500);
for i in cur loop
v_column_list := v_column_list||','||i.column_name;
v_values_list := v_values_list||', :new.'||i.column_name;
end loop;
3) Create your dynamic insert statement and execute it:
declare csql varchar2(500);
csql := 'INSERT INTO '||v_table_name||' ('||v_column_list||') VALUES ('||v_values_list||')';
EXECUTE IMMEDIATE (csql);
Hope this helps...