物化视图上用触发器(用于同步)

作用:由数据源的主表与明细表在目标库进行合并
1,在数据源上建两表,一主,一明细 ,在目标库建引两表的合并表
-- Create table
create table TT_ACC_LEVYCODE主表
(
SESSION_ID NUMBER(10) not null,
LEVYCODE VARCHAR2(11),
KTZC_SESSION_ID VARCHAR2(7)
);


alter table TT_ACC_LEVYCODE
add constraint FKDD primary key (SESSION_ID)
using index
tablespace ZHENGGUAN
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

-- Create table明细表
create table TT_ACC_LEVYDETAILCODE
(
DEATID_ID VARCHAR2(10) not null,
SESSION_ID NUMBER(10),
DETAIL_NAME VARCHAR2(50)
)
tablespace ZHENGGUAN
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table TT_ACC_LEVYDETAILCODE
add constraint RFGDFGDF primary key (DEATID_ID)
using index
tablespace ZHENGGUAN
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table TT_ACC_LEVYDETAILCODE
add constraint DDDEEEEE foreign key (SESSION_ID)
references TT_ACC_LEVYCODE (SESSION_ID);

-- Create table
create table TT_ACC_LEVYCODEINFO
(
SESSION_ID NUMBER(10) not null,
LEVYCODE VARCHAR2(11),
KTZC_SESSION_ID VARCHAR2(7),
DEATID_ID VARCHAR2(10) not null,
DETAIL_NAME VARCHAR2(50)
)
tablespace OWB_TG
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 80K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select, insert, update, delete on TT_ACC_LEVYCODEINFO to STAGING;--注:要把这些权限赋予中转用户

在数据源上建物化视图log
create materialized view log on tt_acc_levycode tablespace zhengguan_sn_log;
create materialized view log on tt_acc_levydetailcode tablespace zhengguan_sn_log;

-------------
2,在中转区建立两源表的物化视图
create materialized view tt_acc_levycode tablespace staging refresh fast as
select t.*
from tt_acc_levycode@LNK27.REGRESS.RDBMS.DEV.US.ORACLE.COM t;
create materialized view tt_acc_levydetailcode tablespace staging refresh fast as
select t.*
from tt_acc_levydetailcode@LNK27.REGRESS.RDBMS.DEV.US.ORACLE.COM t;
--LNK27.REGRESS.RDBMS.DEV.US.ORACLE.COM 为中转区到数据源的dblink
3,在中转用户建立触发器
CREATE OR REPLACE TRIGGER WB_tr_acc_levydetailcode
after INSERT OR UPDATE
ON tt_acc_levydetailcode
FOR EACH ROW
DECLARE
v_SESSION_ID NUMBER(10) ;
v_LEVYCODE VARCHAR2(11);
v_KTZC_SESSION_ID VARCHAR2(7);
BEGIN
if INSERTING then
select t.session_id,t.levycode,t.ktzc_session_id
into v_session_id,v_levycode,v_ktzc_session_id
from tt_acc_levycode t
where t.session_id =:new.session_id;
insert into owb_tg.tt_acc_levycodeinfo values(v_SESSION_ID,v_LEVYCODE,v_KTZC_SESSION_ID,:new.DEATID_ID,:new.DETAIL_NAME);
end if;
if UPDATING then
update owb_tg.tt_acc_levycodeinfo t set t.detail_name=:new.detail_name
where t.deatid_id=:new.deatid_id;
end if;
END;

手工刷新视图
execute dbms_mview.refresh('tt_acc_levycode','f');
execute dbms_mview.refresh('tt_acc_levydetailcode','f');
这样执行可保证先后,若全写一起则并发执行
execute dbms_mview.refresh('tt_acc_levycode,tt_acc_levydetailcode','f');

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/134308/viewspace-140591/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/134308/viewspace-140591/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值