PL / SQL構文では、IF句にSQL文を含めることはできません。
正しいアプローチは、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
存在しない状態で正規化されている必要があります。