私はトリガーにかなり慣れていないので、明らかにどこかで何か間違ったことをしています。元のテーブルからデータを取得するレポート テーブルに取り組んでいます。簡単にするために、1 つのテーブルと 1 つのレポート テーブルがあるとします。
元のテーブル (orig_tab)
CREATE TABLE orig_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
INSERT INTO orig_tab (PK, NAME) VALUES (1, 'AAA');
INSERT INTO orig_tab (PK, NAME) VALUES (2, 'BBB');
INSERT INTO orig_tab (PK, NAME) VALUES (3, 'CCC');
次に、レポート テーブル (rep_tab) があります。
CREATE TABLE rep_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
ここで、ユーザー インターフェイスから、誰かがレコード 2 の値を変更します。明らかに、これはレポート テーブルの挿入として扱われるべきです (このレコードは存在しないため)。その後、しばらくすると値が変更されるため、レポート テーブルの更新ケースになります。
質問: この種のトリガーを作成するにはどうすればよいですか? マージステートメントの場合だと思います。
これは私がやったことです:
create or replace trigger vr_reporting_trigger
after update on orig_tab
for each row
begin
MERGE INTO rep_tab d
USING (SELECT pk FROM orig_tab) s
ON (d.pk = s.pk)
WHEN MATCHED THEN
UPDATE SET d.pk = s.pk,
d.name = s.name
WHEN NOT MATCHED THEN
INSERT (d.pk, d.name) VALUES (s.pk, s.name);
end vr_reporting_trigger;
それを理解するのに役立つ提案や推奨事項はありますか? ありがとう。