Oracle触发多个表

时间:2013-10-03 08:54:40

标签: oracle plsql

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

根据创建第四个表数据的查询复杂性,使用on-commit快速刷新物化视图可以更好地实现(更强大,更灵活,代码更少)。

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