Sintaks PL/SQL tidak mengizinkan penyertaan pernyataan SQL dalam klausa IF.
Pendekatan yang benar adalah memisahkan pernyataan SELECT dan kemudian menguji hasilnya. Sehingga menjadi:
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;
Perhatikan bahwa ini tidak menangani keberadaan beberapa baris di table2
cocok dengan kriteria, atau memang tidak ada baris yang cocok. Itu juga tidak menangani penguncian.
Juga, ingatlah bahwa kode seperti ini tidak berfungsi dengan baik di lingkungan multi-pengguna. Itu sebabnya saya menyebutkan penguncian. Anda harus benar-benar menggunakan logika prosedural untuk menangani persyaratan semacam ini. Meskipun seperti yang sering terjadi pada pemicu yang salah paham, penyebab sebenarnya adalah model data yang buruk. table2.column2
seharusnya dinormalisasi dari keberadaannya.