oracle物化视图建立触发器,物化视图上用触发器(用于同步)

作用:由数据源的主表与明细表在目标库进行合并

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 t;

create materialized view tt_acc_levydetailcode tablespace staging refresh fast as

select t.*

from 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');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现每天10点刷新Oracle物化视图,可以使用Oracle的定时任务调度器DBMS_SCHEDULER来完成。 下面是具体步骤: 1. 创建一个作业(job),该作业定义了要执行的刷新物化视图的SQL语句。 例如: ``` BEGIN DBMS_MVIEW.REFRESH('materialized_view_name', 'C', atomic_refresh=>FALSE); END; ``` 其中,'materialized_view_name'是要刷新的物化视图名称,'C'表示使用完全刷新方式,而atomic_refresh=>FALSE表示不使用原子刷新方式。 2. 创建一个调度程序(schedule),该调度程序定义了作业执行的时间和频率。 例如: ``` BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE( schedule_name => 'refresh_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=10;BYMINUTE=0;BYSECOND=0'); END; ``` 其中,'refresh_schedule'是调度程序名称,start_date指定了调度程序开始执行的时间,repeat_interval指定了调度程序执行的频率和时间。 3. 创建一个触发器(trigger),该触发器将调度程序与作业关联起来。 例如: ``` BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'refresh_job', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN DBMS_MVIEW.REFRESH(''materialized_view_name'', ''C'', atomic_refresh=>FALSE); END;', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY;BYHOUR=10;BYMINUTE=0;BYSECOND=0', enabled => TRUE, auto_drop => FALSE); DBMS_SCHEDULER.SET_ATTRIBUTE('refresh_job', 'schedule_name', 'refresh_schedule'); END; ``` 其中,'refresh_job'是作业名称,job_type指定了作业类型为PLSQL_BLOCK,job_action指定了作业要执行的SQL语句,start_date指定了作业开始执行的时间,repeat_interval指定了作业执行的频率和时间,enabled=>TRUE表示作业启用,auto_drop=>FALSE表示不自动删除作业。 4. 执行触发器(trigger),使其开始执行作业。 例如: ``` BEGIN DBMS_SCHEDULER.RUN_JOB('refresh_job'); END; ``` 以上就是在Oracle中实现每天10点刷新物化视图的具体步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值