ITPub博客

首页 > 应用开发 > IT综合 > DBLink小结

DBLink小结

原创 IT综合 作者:therorawt 时间:2007-06-06 14:38:48 0 删除 编辑

今天和营帐测试有价卡接口,用到了DBLink,现把当时遇到的一些问题总结如下:

环境
三台机器:ORACLE服务端1(简称S1),ORACLE服务器端2(简称S2),客户端1(简称C1)。C1通过客户端连上S1,然后建立个连接S2的DBLink,以便执行S2下的几个存储过程

[@more@]

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博客 ” ,链接:https://blog.itpub.net/9896745/viewspace-917656/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    37
  • 访问量
    53286