これに対する答えを探してみましたが、本当に役立つものは見つかりませんでした。ないか、私の検索機能がノックしたかのどちらかです。とにかく、ここに私の状況があります:
Z_TEST と Z_TEST2 という 2 つの同一のテーブルがある場合があります。必要に応じて、Z_TEST2 を監査テーブルに呼び出します。
両方とも、ID (数値) と CFIELD (CLOB) の 2 つの列があります。Z_TEST には、Z_TEST2 (実際には CLOB フィールドのみ) を挿入または更新するトリガーがあります。
シナリオ 1:
通常のトリガーである Z_TEST で次のトリガーを作成すると、監査テーブルも更新されます。
CREATE OR REPLACE TRIGGER Z_TEST_TRIG
AFTER INSERT OR UPDATE ON Z_TEST
FOR EACH ROW
Begin
If inserting then
Begin
insert into Z_TEST2 values(:new.ID, :new.CFIELD);
end;
end if;
if updating then
begin
update Z_TEST2 Set CFIELD = :new.CFIELD where ID = :new.id;
end;
end if;
End;
シナリオ 2:
複合トリガーである次のトリガーを作成し、その「各行の後」ブロックを使用すると、監査テーブルの CLOB は何も null で更新されません。
create or replace trigger Z_TEST_TRIG
FOR UPDATE OR INSERT ON Z_TEST
COMPOUND TRIGGER
AFTER EACH ROW IS
Begin
If inserting then
Begin
insert into Z_TEST2 values(:new.ID, :new.CFIELD);
end;
end if;
if updating then
begin
update Z_TEST2 Set CFIELD = :new.CFIELD where ID = :new.id;
end;
end if;
END AFTER EACH ROW;
END Z_TEST_TRIG;
これがシナリオ 1 では機能するのに、2 では機能しない理由を知っている人はいますか? 私たちの WHOLE フレームワークはシナリオ 2 (複合トリガー) に基づいており、CLOB データ型を使用する必要性に最近出くわしたばかりで、この問題が発生しました。
なぜ違いがあり、私のコードには何かが欠けていますか?