La syntaxe PL/SQL ne permet pas d'inclure des instructions SQL dans la clause IF.
L'approche correcte consiste à séparer l'instruction SELECT, puis à tester son résultat. Ce serait donc :
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;
Notez que cela ne gère pas l'existence de plusieurs lignes dans table2
correspondant aux critères, ou bien s'il n'y a pas de lignes correspondantes. Il ne gère pas non plus le verrouillage.
Gardez également à l'esprit qu'un code comme celui-ci ne fonctionne pas bien dans les environnements multi-utilisateurs. C'est pourquoi j'ai mentionné le verrouillage. Vous devriez vraiment utiliser la logique procédurale pour gérer ce genre d'exigences. Bien que, comme c'est souvent le cas avec des déclencheurs mal conçus, le véritable coupable est un modèle de données médiocre. table2.column2
aurait dû être normalisé hors de l'existence.