1、通过“MATERIALIZED”视图,监管远程数据变化,更新本地数据
a、创建数据库连接:
-- Drop existing database link
drop database link 数据库连接名称;
-- Create database link
create database link 数据库连接名称
connect to 用户名
using 'IP地址:1521/orcl';
b、创建“MATERIALIZED”视图和刷新方式
CREATE MATERIALIZED VIEW SN_VEH_IS_COMM_EXCH_BLOB_OUT
REFRESH FAST ON DEMAND
START WITH TO_DATE('30-12-2016 12:28:24', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE+1/(24*60)
AS
SELECT
"VEH_IS_COMM_EXCH_BLOB"."BH"
"BH","VEH_IS_COMM_EXCH_BLOB"."SJLX"
"SJLX","VEH_IS_COMM_EXCH_BLOB"."ZJ"
"ZJ","VEH_IS_COMM_EXCH_BLOB"."ZJZ" "ZJZ","VEH_IS_COMM_EXCH_BLOB"."SJNR1"
"SJNR1","VEH_IS_COMM_EXCH_BLOB"."SJNR2"
"SJNR2","VEH_IS_COMM_EXCH_BLOB"."SJNR3"
"SJNR3","VEH_IS_COMM_EXCH_BLOB"."SJNR4"
"SJNR4","VEH_IS_COMM_EXCH_BLOB"."SJNR5"
"SJNR5","VEH_IS_COMM_EXCH_BLOB"."SJDX1"
"SJDX1","VEH_IS_COMM_EXCH_BLOB"."SJDX2"
"SJDX2","VEH_IS_COMM_EXCH_BLOB"."SJDX3"
"SJDX3","VEH_IS_COMM_EXCH_BLOB"."SJDX4"
"SJDX4","VEH_IS_COMM_EXCH_BLOB"."SJDX5"
"SJDX5","VEH_IS_COMM_EXCH_BLOB"."CLBJ"
"CLBJ","VEH_IS_COMM_EXCH_BLOB"."CJSJ"
"CJSJ","VEH_IS_COMM_EXCH_BLOB"."GXSJ" "GXSJ" FROM
"VEH_IS_COMM_EXCH_BLOB"@"数据库连接名称"
"VEH_IS_COMM_EXCH_BLOB";
手动刷新
begin
DBMS_SNAPSHOT.REFRESH('SN_VEH_IS_COMM_EXCH_BLOB_OUT','F');
end;
c、创建触发器
CREATE OR REPLACE TRIGGER TRI_VEH_IS_COMM_EXCH_BLOB_AFR
AFTER DELETE OR INSERT OR UPDATE
ON SN_VEH_IS_COMM_EXCH_BLOB_OUT
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
tmp_id number(30):=-1;
begin
--dbms_output.put_line('begin');
if inserting then
--select bh into tmp_id from veh_is_comm_exch_blob where bh=:new.bh;
for p in(select bh from veh_is_comm_exch_blob where bh=:new.bh)
loop
tmp_id:=p.bh;
end loop;
--dbms_output.put_line(tmp_id||'===------------');
if (tmp_id=-1) then
insert into veh_is_comm_exch_blob (BH, SJLX, ZJ, ZJZ, SJNR1, SJNR2,
SJNR3, SJNR4, SJNR5, SJDX1, SJDX2, SJDX3, SJDX4, SJDX5, CLBJ, CJSJ,
GXSJ)
values
(:new.BH,:new.SJLX,:new.ZJ,:new.ZJZ,:new.SJNR1,:new.SJNR2,:new.SJNR3,:new.SJNR4,:new.SJNR5,:new.SJDX1,:new.SJDX2,:new.SJDX3,:new.SJDX4,:new.SJDX5,:new.CLBJ,:new.CJSJ,:new.GXSJ);
end if;
end if;
if updating then
--dbms_output.put_line('updated');
for p in(select bh from veh_is_comm_exch_blob where bh=:old.bh)
loop
if (p.bh=:new.bh)then
update veh_is_comm_exch_blob set SJLX=:new.SJLX, ZJ=:new.ZJ,
ZJZ=:new.ZJZ, SJNR1=:new.SJNR1, SJNR2=:new.SJNR2, SJNR3=:new.SJNR3,
SJNR4=:new.SJNR4, SJNR5=:new.SJNR5, SJDX1=:new.SJDX1, SJDX2=:new.SJDX2,
SJDX3=:new.SJDX3, SJDX4=:new.SJDX4, SJDX5=:new.SJDX5, CLBJ=:new.CLBJ,
CJSJ=:new.CJSJ, GXSJ=:new.GXSJ where bh=:old.bh;
end if;
end loop;
end if;
if deleting then
--dbms_output.put_line('deleted');
delete from veh_is_comm_exch_blob where bh=:old.bh;
end if;
--dbms_output.put_line('end');
end TRI_VEH_IS_COMM_EXCH_BLOB_AFR;
2、更新或插入数据之前,更改数据的触发器
CREATE OR REPLACE TRIGGER TRI_FRM_WS_CONTROL_AFR
BEFORE INSERT OR UPDATE
ON FRM_WS_CONTROL
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
if inserting OR updating then
if (:NEW.JKXLH='数据') then
:NEW.IPDZ1:='更新的数据';
end if;
if (:NEW.JKXLH='数据') then
:NEW.IPDZ1:='更新的数据';
end if;
if (:NEW.JKXLH='数据') then
:NEW.IPDZ1:='更新的数据';
end if;
end if;
end FRM_WS_CONTROL_AFR;
注意:本文归作者所有,未经作者允许,不得转载