Die PL/SQL-Syntax erlaubt es nicht, SQL-Anweisungen in die IF-Klausel aufzunehmen.
Der richtige Ansatz besteht darin, die SELECT-Anweisung herauszutrennen und dann auf ihr Ergebnis zu testen. Das wäre also:
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;
Beachten Sie, dass dies nicht das Vorhandensein mehrerer Zeilen in table2
behandelt den Kriterien entsprechen, oder es gibt tatsächlich keine übereinstimmenden Zeilen. Es handhabt auch keine Sperren.
Denken Sie auch daran, dass Code wie dieser in Umgebungen mit mehreren Benutzern nicht gut funktioniert. Deshalb habe ich das Sperren erwähnt. Sie sollten wirklich prozedurale Logik verwenden, um mit dieser Art von Anforderungen umzugehen. Obwohl, wie es oft bei schlecht durchdachten Triggern der Fall ist, der eigentliche Schuldige ein schlechtes Datenmodell ist. table2.column2
hätte nicht mehr normalisiert werden sollen.