Is (and if how) it possible in Oracle to "insert into  values " if  has virtual columns
Use a view that excludes the virtual columns to do the manipulation. I've just tested this &amp; it works:

create view v_tq84_virtual_test_with as ( select col_1, col_2, col_3, col_4 from tq84_virtual_test_with );

declare
  r v_tq84_virtual_test_with%rowtype;
begin

  select * into r from v_tq84_virtual_test_with where col_2 = 8;

  r.col_4 := r.col_4 - 2;

  insert into v_tq84_virtual_test_with values r;

end;
/


As far as I can tell, this is the only way to workaround your requirement to use %rowtype.