PL/SQL-syntaksen tillader ikke at inkludere SQL-sætninger i IF-sætningen.
Den korrekte fremgangsmåde er at adskille SELECT-sætningen og derefter teste for resultatet. Så det ville være:
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;
Bemærk, at dette ikke håndterer eksistensen af flere rækker i table2
matcher kriterierne, eller der er faktisk ingen matchende rækker. Den klarer heller ikke låsning.
Husk også, at kode som denne ikke fungerer godt i flerbrugermiljøer. Det er derfor, jeg nævnte låsning. Du burde virkelig bruge procedurelogik til at håndtere den slags krav. Selvom det ofte er tilfældet med uudtænkte triggere, er den virkelige synder en dårlig datamodel. table2.column2
burde være blevet normaliseret ude af eksistens.