измените его так, чтобы он выполнялся в 2 последовательных шага (НЕ в одном анонимном блоке PL / SQL, как сейчас):
Сначала это
begin
execute immediate 'create table rat1 ( name varchar2(10) )';
commit;
end;
ТОГДА как второй блок это
declare
type yy is table of t12.name%type index by binary_integer;
y yy;
n number:=1;
begin
select name bulk collect into y from t12;
for i in (select id,name from t12)
loop
dbms_output.put_line(y(n));
n:=n+1;
end loop;
forall i in y.first..y.last
insert into rat1 values(y(i));
end;
РЕДАКТИРОВАТЬ - согласно комментарию:
Перед выполнением анализируется весь блок PL / SQL - все объекты, используемые в блоке PL / SQL, должны существовать ДО того, как будет выполнен блок PL / SQL ...