急,在线等!如何在两个oracle数据库之间的相同结构的两个表实现数据的同步更新,dblink已经建好了

有用触发器尝试,网上查了不少资料,还未解决!

第1个回答  推荐于2016-09-06
数据类型都一样的么,可以考虑用触发器实现 以oracle数据库为例 有两张表test和test01 字段有id name age sal
create or replace trigger TRIG_UPDATE_TEST
after insert or delete or update on test
for each row
declare
l_id varchar2(50);
l_name varchar2(50);
l_age number;
l_sal number;

begin
if(deleting or updating) then
delete test01
where id=:old.id;
if(deleting) then
return;
end if;
end if;

l_id:=:new.id;
l_name:=:new.name;
l_age:=:new.age;
l_sal:=:new.sal;
begin
insert into test01(id,name,age,sal) values(l_id,l_name,l_age,l_sal);
end;
end TRIG_UPDATE_TEST;
再简化点就是在触发器中不声明变量,直接用:new.字段代替
哎,没分啊追问

begin
if(njwms.YX_上标信息表@NJ_TEST.制令号_ID= :new_value.制令号_ID and njwms.YX_上标信息表@nj_test.任务号_ID= :new_value.任务号_ID and) then
update njwms.YX_上标信息表@NJ_TEST set njwms.YX_上标信息表@NJ_TEST.是否已上标= :new_value.是否已上标;
主体是这样,其他的放不下我就删掉了,调试时在@NJ_TEST set 出现了PLS-00103的错,麻烦帮看看。(after update on WMS_NGC_上标信息表)

追答

你有没有将声明变量写在begin里了,如果有的话,调出来写到外面去,实在不行的话 表结构和要实现的功能说明发我,我帮你看看

追问

变量是在begin外面声明的,你邮箱多少啊,我发给你看看

追答

站内消息看到没

本回答被提问者采纳
第2个回答  2011-07-26
可以使用物化视图或者使用事物快照
这两种方法都能够实现两个数据库的表数据同步
建议使用物化视图,物化视图是快照的功能升级,更为强大.追问

我不会物化快照,从来没弄过,上网搜了点资料,觉得不太理解都,请问您有没有关于数据同步的物化视图的代码啊?我想参考下,因为我是新手哎!

追答

资料我只有官方的英文文档,不保证你能看懂。
但你在google里搜一下还是有很多的相关文章的。

追问

没事的,英文文档也可以,麻烦发我邮箱[email protected],谢谢喽!

第3个回答  2011-07-27
oracle 中有个物化视图。可以用来做远程的同步更新,而已不会给对方服务带来很大压力。。 没给分就只能告诉你这么多了,自己研究去吧
第4个回答  2011-07-26
可尝试用job执行存储过程来解决,触发器一般不保险,容易出错。追问

因为涉及到两个数据库之间,有在存储过程里面尝试merge into,但是不行,现在抓取功能已经实现了,就差反过来更新了,我对oracle里面的这些都很陌生,弄了好几天才算明白点,麻烦能不能给出类似代码供参考啊?

相似回答