0

私は3つのテーブルA、B、Cを持っています。これらの 3 つのテーブルのストアド プロシージャがあり、結合条件が 4 番目のテーブル D に挿入されています。今、私が必要としているのは、これら 3 つのテーブル (A、B、C) に対して行われた "ANY INSERT OR UPDATE" で、4 番目のテーブル D を更新する必要があります。 pl/sql でトリガーを記述する方法を教えてください。

4

2 に答える 2

1

で必要な更新を行う 3 つのトリガーが必要ですD。たとえば、テーブルのA場合、これは次のようになります。

CREATE OR REPLACE TRIGGER trg_ins_upd_A
  AFTER INSERT OR UPDATE ON A 
  FOR EACH ROW
DECLARE
  -- required declarations
BEGIN
  IF INSERTING THEN 
    UPDATE D 
       SET column1 = :new.column 
     WHERE column1 = :old.column ...
  END IF;
  IF UPDATING THEN
    -- do required updates on D here 
  END IF;
END;

この更新を実行するストアド プロシージャがある場合は、次のようなものを実装できます。

CREATE OR REPLACE TRIGGER trg_ins_upd_A
  AFTER INSERT OR UPDATE ON A 
  FOR EACH ROW
DECLARE
  -- required declarations
BEGIN
  IF INSERTING THEN 
    my_procedure_one (...);
  END IF;
  IF UPDATING THEN
    my_procedure_two (...);
  END IF;
END;
于 2013-10-03T09:03:35.070 に答える
1

4 番目のテーブルのデータを作成するためのクエリの複雑さによっては、オンコミットの高速更新マテリアライズド ビューを使用して実装する方が適切な場合があります (より堅牢で、柔軟性が高く、コードが少ない)。

http://docs.oracle.com/cd/B28359_01/server.111/b28326/repmview.htm

于 2013-10-03T09:24:26.280 に答える