A,B两个表空间,各有一个表base_info,其表结构相同,如下:base_info:aa01  varchar(30);
aa02  varchar(100);
aa03  varchar(300);现在打算实现两个表空间的base_info表数据同步..当A.base_info中有增删改操作时要把改动的数据写到B.base_info中去.
CREATE OR REPLACE TRIGGER ttt01
AFTER DELETE OR INSERT OR UPDATE
ON A.base_info
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
.
.
...

解决方案 »

  1.   

    需要有该用户表的insert权限才行
    触发器很简单
    create or replace trigger trgname 
    after insert or update or delete on tbname
    for each row
    begin
     if inserting then
        insert into uname.tbname values(:new.col1,:new.col2...);
     elsif updating then
        update uname.tbname set ... where colid=:old.colid ... ;
     else
        delete from uname.tbname where where colid=:old.colid;
    end trgname;
    /
      

  2.   

    对于这种需求,建议用实体化视图来完成,Oracle8i中叫做snapshot基于A表创建实体化视图,设置为每当提交就快速刷新模式给你个例子,自己看看:SQL> CREATE TABLE A ( TT VARCHAR2(2),MM VARCHAR2(3));表已创建。SQL> CREATE MATERIALIZED VIEW LOG ON TEST.A  WITH ROWID,SEQUENCE INCLUDING NEW VALUES;实体化视图日志已创建。SQL> CREATE MATERIALIZED VIEW TEST.B
      2  BUILD IMMEDIATE
      3  USING NO INDEX
      4  REFRESH FAST ON COMMIT WITH ROWID
      5  AS
      6  SELECT * FROM TEST.A;实体化视图已创建。SQL> INSERT INTO TEST.A VALUES('1','A');已创建 1 行。SQL> COMMIT;提交完成。SQL> SELECT *FROM TEST.B;TT MM
    -- ---
    1  A注意:由于同一个用户下不能有同名的表和实体化视图,因此创建实体化视图之前,需要先drop表
      

  3.   

    CREATE OR REPLACE TRIGGER GOOD
    AFTER DELETE OR INSERT OR UPDATE
    ON A.info1 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
       case 
       when inserting then
         insert into B.info1 values(:NEW.a1,:NEW.a2);
       when updating then  
         update B.info1 set a2=:NEW.a2 where a1=:NEW.a1;
       when deleting then
         delete from B.info1 where a1=:NEW.a1; 
       end case;  
    END;找不到表info1,跨表空间怎么整