A sintaxe PL/SQL não permite incluir instruções SQL na cláusula IF.
A abordagem correta é separar a instrução SELECT e depois testar seu resultado. Então isso seria:
create or replace trigger trig1
after insert on table_1
for each row
declare
v table2.column2%type;
begin
select table2.column2
into v
from table2
where table2.id= :new.id;
if v is null
then
update table2
set table2.column2 = :new.column1
where table2.id = :new.id;
end if;
end trig1;
Observe que isso não lida com a existência de várias linhas em
table2
correspondendo aos critérios ou, de fato, não havendo linhas correspondentes. Também não suporta travamento. Além disso, lembre-se de que um código como esse não funciona bem em ambientes multiusuário. É por isso que eu mencionei bloqueio. Você realmente deveria usar lógica procedural para lidar com esses tipos de requisitos. Embora, como costuma ser o caso de gatilhos mal concebidos, o verdadeiro culpado é um modelo de dados ruim.
table2.column2
deveria ter sido normalizado fora da existência.