有两个数据库,通过数据链进行连接操作,也就是同步更新相同表的数据。
数据库1:
表test(id,name)有两个字段
数据库2:
表test(id,name)有两个字段,同数据库1中的表test
表test_log(auto_id,update_count,update_date,op_type)是数据库2的日志表;
我是用数据库链接链有数据库1同步数据库2,就是更新数据库1的表test的时候也更新数据库2的表test,数据库1中是通过触发器或者Jobs方式去更新数据库2的表test的。
现在我想在数据库2的表test_log中记录每次由数据库1进行的增、删、改操作后,数据库2中的表test同步更新的记录数,要么增加的记录数要么修改或删除的记录数。
比如:对数据库2中的表test更新后,test_log会记录如下
auto_id update_count update_date op_type
1 10 2009-11-11 08:00:00 增加
2 2 2009-11-11 08:22:00 修改
3 1 2009-11-11 08:24:00 删除
不知道用何种方式能够在数据库2中实现如上功能,请高手赐教。
我有试过用触发器,但sql%rowcount一直获取不到受影响的记录数。急!!!!!!!
行级trigger
for each row
里面个人认为无法获取到同一个表的行数.
可以考虑在存储过程中实现.
删除的时候用
SQL%ROWCOUNT来获取.
--2009 11-12 --21:11
Code
create table test1
(
id varchar2(20),
name varchar2(50)
)
insert into test1 values (1,'woody')
select * from test2
rollback
select * From test1
update test1 set name='asdas' where id='1'
select * from test_log
delete from test_log
CREATE OR REPLACE TRIGGER trg_test1_woody
after INSERT OR DELETE OR UPDATE
ON test1
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare v_num number;
begin
if inserting then
insert into test2(id,name) values (:new.id,:new.name);
--获取数量
v_num:=sql%rowcount;
insert into test_log(auto_id,update_count,update_date,op_type) values
(test_log_seq.nextval,v_num,sysdate,'inserting');
end if;
if updating then
--获取数量
update test2 set name=:new.name,id=:new.id where id=:old.id;
v_num:=sql%rowcount;
insert into test_log(auto_id,update_count,update_date,op_type) values (test_log_seq.nextval,v_num,sysdate,'update');
end if;
if deleting then
--获取数量
delete from test2 where id=:old.id;
v_num:=sql%rowcount;
insert into test_log(auto_id,update_count,update_date,op_type) values (test_log_seq.nextval,v_num,sysdate,'delete');
end if;
end trg_test1_woody;
create table test2
(
id varchar2(20),
name varchar2(50)
)
create sequence test_log_seq
create table test_log
(
auto_id varchar2(20),
update_count number,
update_date date,
op_type varchar2(30)
)
我认为这和“受影响的记录数”没有直接关系。
1.数据库1表test添加触发器,分别在插入,更新,删除时同步数据库2表test,同时更新数据库2表test_log的统计
2.或者将上述1中的“更新数据库2表test_log的统计”放在数据库2的表test的插入,更新和删除触发器中。