PL/SQL-syntaxen tillåter inte att inkludera SQL-satser i IF-satsen.
Den korrekta metoden är att separera SELECT-satsen och sedan testa för dess resultat. Så det skulle vara:
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;
Observera att detta inte hanterar förekomsten av flera rader i table2
matchar kriterierna, eller så finns det inga matchande rader. Den klarar inte heller låsning.
Tänk också på att kod som denna inte fungerar bra i fleranvändarmiljöer. Det var därför jag nämnde låsning. Du borde verkligen använda procedurlogik för att hantera den här typen av krav. Även om som ofta är fallet med ogenomtänkta triggers är den verkliga boven en dålig datamodell. table2.column2
borde ha normaliserats ur existens.