今天和营帐测试有价卡接口,用到了DBLink,现把当时遇到的一些问题总结如下:
环境
三台机器:ORACLE服务端1(简称S1),ORACLE服务器端2(简称S2),客户端1(简称C1)。C1通过客户端连上S1,然后建立个连接S2的DBLink,以便执行S2下的几个存储过程
1、需要在S1机器下建立S2的tns,而不能在机器C1下建S2的tns;
2、创建语句
S2:
create user yzusr identified by yzusr;
grant connect,resource to yzusr;
grant execute on ynjfk.online_cardactive to yzusr; --C1需要访问的存储过程
C1:
create database link dblink_mydb connect to yzusr identified by yzusr using 'mydb';
说明:据说如果S2上参数global_names设置为TRUE,那么dblink的名称应和远程ORACLE服务名一样才行。
查看方式:在S2上 show parameter global_names
3、C1执行S2上存储过程
online_cardactive的参数说明:
Online_Cardactive(
v_begincard IN VARCHAR2, --开始卡顺序号
v_endcard IN VARCHAR2, --结束卡顺序号
v_operaterid IN VARCHAR2, --操作员id
v_operatetime IN VARCHAR2, --操作时间 标准格式:2006-08-22 10:10:10
v_result OUT INTEGER, --操作结果
v_remarks OUT VARCHAR2 --操作结果中文说?
)
调用:以在sql*plus中调用举例
SQL>set serveroutput on
SQL>var ret number
SQL>var retname varchar2
SQL>exec ynjfk.online_cardactive@dblink_mydb('087100000005','087100000005','021205','2007-06-07 12:55:10',:ret,:retname);
查看调用结果:
SQL>print ret;
SQL>print retname;
SQL>select :ret,:retname from dual;
说明:如果在上面的调用中S2不想让C1知道该存储过程的schema,可以在S2中为过程online_cardactive建立一个synonym
create public synonym ONLINE_CARDACTIVE for YNJFK.ONLINE_CARDACTIVE
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9896745/viewspace-917656/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9896745/viewspace-917656/