Syntaxe PL/SQL neumožňuje zahrnutí příkazů SQL do klauzule IF.
Správný přístup je oddělit příkaz SELECT a poté otestovat jeho výsledek. Takže by to bylo:
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;
Všimněte si, že to nezpracovává existenci více řádků v table2
vyhovující kritériím nebo ve skutečnosti neexistují žádné odpovídající řádky. Také nezvládá zamykání.
Mějte také na paměti, že kód jako tento nefunguje dobře v prostředí s více uživateli. Proto jsem zmínil zamykání. Měli byste opravdu používat procedurální logiku, abyste zvládli tyto druhy požadavků. I když, jak už to u nedomyšlených spouštěčů bývá, skutečným viníkem je špatný datový model. table2.column2
měla být normalizována.