因为问题不是非常明确,所以需要分情况来讨论。
要考虑几个问题:1、是否需要在一个事务中实现?2、对方数据库若不是oracle的话,是否在oracle发布的gateways支持的数据库列表中。
对于事务的控制,个人认为是关键,这可以查看“二阶段提交”相关知识。
oracle发布的gateway支持非常多种的接入类型,常用数据库都无问题。
以下将你的问题理解成:oracleA库在底层触发器或者过程或者函数中需要调用oracleB库中的存储过程,并实现将数据写入B库中的操作。
步骤1:
建立DBLINK
假设B库服务名orcl,访问用户名密码comm/password
两种方式:
1、已经配置本地服务,服务名orcl
create public database
link link_orcl connect to comm
identified by password using 'orcl';
2、未配置本地服务
create database link link_orcl
connect to comm identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
步骤2:
假设库B(上述orcl库)存在如下存储过程
create or replace procedure comm.proc_InsertTable(v1 in varchar2)
is
begin
insert into table1
(
col1
)
values(
v1
);
end;
步骤3:
在A库中假设存在一个存储过程:
create or replace procedure proc_Local(vLocal in varchar2)
is
begin
comm.proc_InsertTable@link_orcl(vLocal);
end;
在A库任意地方调用本地存储过程,或通过编码调用A库存储过程皆可。
注意:
建立完DBLink后,可通过本地的SQL查询语句来检验验证有无通过,如select * from comm.table1@link_orcl;(comm.table1存在与B库中)
A库中调用存储过程的写法
注意B库中创建存储过程的用户对操作的表的权限。
希望能帮到你。