Składnia PL/SQL nie pozwala na uwzględnienie instrukcji SQL w klauzuli IF.
Prawidłowe podejście polega na oddzieleniu instrukcji SELECT, a następnie przetestowaniu jej wyniku. Więc to byłoby:
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;
Zauważ, że nie obsługuje to istnienia wielu wierszy w table2
spełniające kryteria lub rzeczywiście nie ma pasujących wierszy. Nie obsługuje również blokowania.
Pamiętaj też, że taki kod nie działa dobrze w środowiskach wielu użytkowników. Dlatego wspomniałem o blokowaniu. Naprawdę powinieneś używać logiki proceduralnej do obsługi tego rodzaju wymagań. Chociaż, jak to często bywa w przypadku źle przemyślanych wyzwalaczy, prawdziwym winowajcą jest słaby model danych. table2.column2
powinien zostać znormalizowany.