Синтаксис 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
должно быть нормализовано.
Не могли бы вы предоставить нам код ошибки/messsage? – Timst
для моего триггера нет сообщения об ошибке, это только предупреждение, в котором говорится, что триггер создается с ошибками компиляции. –