La sintaxis PL/SQL no permite incluir sentencias SQL en la cláusula IF.
El enfoque correcto es separar la declaración SELECT y luego probar su resultado. Así que eso sería:
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;
Tenga en cuenta que esto no maneja la existencia de múltiples filas en table2
coincidiendo con los criterios, o de hecho no hay filas coincidentes. Tampoco maneja el bloqueo.
Además, tenga en cuenta que un código como este no funciona bien en entornos multiusuario. Es por eso que mencioné el bloqueo. Realmente debería usar la lógica de procedimiento para manejar este tipo de requisitos. Aunque, como suele ocurrir con los activadores mal concebidos, el verdadero culpable es un modelo de datos deficiente. table2.column2
debería haber sido normalizado fuera de existencia.