0

我有 3 张桌子 A、B、C。我有这 3 个表的存储过程,其中在第 4 个表 D 中插入了连接条件。现在我想要的是对这 3 个表(A、B、C)进行的“任何插入或更新”应该更新第 4 个表 D。任何一个都可以请问如何在pl/sql中编写触发器?

4

2 回答 2

1

根据创建第四个表数据的查询复杂性,这可能通过提交时快速刷新物化视图更好地实现(更健壮,具有更大的灵活性和更少的代码)。

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

于 2013-10-03T09:24:26.280 回答
1

您需要三个触发器,它们对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 回答