假设本地的数据库为A,其中有表a(a_pk varchar2(10) primary key,b_bh varchar(10),b_name varchar(10),...),
有其他公司数据库为B,其中有表b(bh varchar(10) primary key,name varchar(10),...),
表b有触发器tr_b_bh,如下:(数据库B中有间隔设置为1的序列seq_b_bh)
---------------------------
create trigger tr_b_bh
before insert on b
for each row
declare
begin
select seq_b_bh.nextval into :new.bh from dual;
end tr_b_bh;
--------------------------
B库为其他公司的数据库,只允许访问,不让修改表结构和建触发器建表之类的操作,
现在要实现的是,在本地的a表中插入数据,然后通过a的触发器自动插入到B库的b表中,b表的bh字段不能写入,只能由对方公司数据库自己生成。
因为向b表插入数据后,还要根据b表的改动对应修改a表的数据,但是b表数据项中只有bh一个唯一标识,所以需要在向b表插入数据后,自动取回到b表的主键bh字段,并更新回a表中。
试过returning方法,但是不能作用于远程数据库现求能向b表插入数据并取回b表主键的触发器的写法,分数不多,如果有解决办法了,必将剩余的分全部送上!在线等结果。。
有其他公司数据库为B,其中有表b(bh varchar(10) primary key,name varchar(10),...),
表b有触发器tr_b_bh,如下:(数据库B中有间隔设置为1的序列seq_b_bh)
---------------------------
create trigger tr_b_bh
before insert on b
for each row
declare
begin
select seq_b_bh.nextval into :new.bh from dual;
end tr_b_bh;
--------------------------
B库为其他公司的数据库,只允许访问,不让修改表结构和建触发器建表之类的操作,
现在要实现的是,在本地的a表中插入数据,然后通过a的触发器自动插入到B库的b表中,b表的bh字段不能写入,只能由对方公司数据库自己生成。
因为向b表插入数据后,还要根据b表的改动对应修改a表的数据,但是b表数据项中只有bh一个唯一标识,所以需要在向b表插入数据后,自动取回到b表的主键bh字段,并更新回a表中。
试过returning方法,但是不能作用于远程数据库现求能向b表插入数据并取回b表主键的触发器的写法,分数不多,如果有解决办法了,必将剩余的分全部送上!在线等结果。。
--创建DBLINK ad_link 来访问B数据库啊,然后在A数据库a表创建触发器,触发器中往B数据库b表插值
--要返回B数据库b表中最新插入的那个序列bh,只需要查询就是了啊
--select max(bh) into b_bh from b@ad_link;
--不知道是不是这种效果:
create or replace trigger tr_a_bh
before insert on a
for each row
declare
begin
insert into b@ad_link(name,....) values (:new.name ,....) ;
select max(bh) into :new.b_bh from b@ad_link;
end tr_b_bh;
--那有可能不是新插入的那个,不知道自治事务行不?
--或者就考虑用returning方式呢?
create trigger tr_a_bh
before insert on a
for each row
declare
sql_str varchar2(1000);
begin
sql_str:='insert into b@ad_link(name,....) values (:1 ,:2,....) returning bh into :3' ;
execute immediate sql_str using :new.name,..... returning bulk collect into :new.b_bh;
end tr_a_bh;
新建了个数据库,测试之后,在建立触发器的时候,提示:
ora-22816 ora-06512 ora-04088看样子不能用与远程表。。看样子没什么好的办法了,我准备用b表的几个字段做定位,多选几个条件加起来,定位的能比max准一些。