Синтаксисът на PL/SQL не позволява включване на SQL изрази в клаузата IF.
Правилният подход е да отделите оператора SELECT и след това да тествате неговия резултат. Така че това би било:
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;
Имайте предвид, че това не обработва съществуването на множество редове в table2
съответстващи на критериите или наистина няма съответстващи редове. Освен това не се справя със заключването.
Освен това имайте предвид, че код като този не функционира добре в среди с много потребители. Затова споменах заключване. Трябва наистина да използвате процедурна логика, за да се справите с тези видове изисквания. Въпреки че, както често се случва с лошо замислени тригери, истинският виновник е лош модел на данни. table2.column2
е трябвало да се нормализира и не съществува.