Oracle访问sql server 的存储过程

主要是使用链接服务器的方式

 

在Oracle  SQL  Developer建立链接服务器就不介绍了,网上也有很多教程

链接服务器的效果图如下图:

 

在Oracle端建立存储过程来调用sql server 的存储过程,sql脚本如下:

create or replace procedure obs.SynchronizeDiagnose_call
(in_EncounterId in number default -1)
as 
c integer;
nr integer;
v_sql varchar2(32767);
begin
    v_sql:='EXEC pHis30_SynchronizeDiagnose'||' '||to_char(in_EncounterId);
    c:=DBMS_HS_PASSTHROUGH.OPEN_CURSOR@MZOP;
    DBMS_HS_PASSTHROUGH.PARSE@MZOP(c,v_sql);
    nr:=DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@MZOP(c);
    DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@MZOP(c);
    dbms_output.put_line(nr);
    commit;
end;

上面的@MZOP是链接服务器的名称,v_sql是要执行的sql语句,EXEC pHis30_SynchronizeDiagnose是sql server端的存储过程

 

调用如下:

begin
obs.SynchronizeDiagnose_call(443834);
end;

 

 

 

 

2020年11月3日更新:

今天看到同事用了一个更简单的方法:

1 链接服务器还是使用文章前面的那个

2 在Oracle这边直接调用sql server的存储过程

begin
pHis30_SynchronizeDiagnose@MZOP(4000);
commit;
end;

其中pHis30_SynchronizeDiagnose是sql server的存储过程名称,MZOP是链接服务器的名称,4000为输入的参数

不过要注意的是:如果sql server 的存储过程有更新表的操作,在oracle这边一定要commit,不然会锁住sql server的表(测试发现是表锁,而不是行锁)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值