如何通过linked server对远程Oracle进行数据操作.docxVIP

如何通过linked server对远程Oracle进行数据操作.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何通过linkedserver对远程Oracle进行数据操作?1.?OpenqueryOpenquery是使用linked server中非常推荐使用的函数。通常情况下,如果我们用四段式的名称访问远程的oracle table,比如:Select * from linkedserver.oracledb.user.table where id=n由于SQL Server没有办法获得Oracle端的统计信息,即使在ID字段上有index,以上的语句还是没有办法使用oracle端的index,默认的行为就是把所有的数据传送给SQL Server然后在SQL Server端做过滤.? ?如果我们使用OpenQuery进行insert、update和delete操作,我们可以手工的决定哪个部分的语句直接传递给oracle执行。具体用法举例为:?DELETE from OPENQUERY (oracle92,SELECT * FROM TEST WHERE ID = 1) INSERT OPENQUERY (ORACLE92,SELECT * FROM TEST) VALUES (2, CC) UPDATE OPENQUERY(ORACLE92,SELECT * FROM TEST WHERE ID = 1) SET NAME =CCC?同时,Openquery可以跳过元数据的类型校验,因此是linked server语句的访问性能提高。有时在相互兼容性不够好的两种数据库之间,比如SQL Server 和DB2之间,直接用四段式的方式访问是没有办法通过元数据校验并且返回结果集的,但是当我们改用openquery函数的时候,就可以成功的访问远程数据了。?如何通过linked server 调用远程oracle的存储过程。Linked server是不支持直接调用非SQL Server的远程数据库的带参数的存储过程的。下面列出了三种方法,这里只有方法2在32位及64位的SQL Server都可用:?*** 方法1***?可以使用msdaora调用一个没有参数的Oracle存储过程。使用oraOLEDB.oracle,会引发错误7357,这意味着在64位oraOLEDB.oracle接口上会执行失败。(64bit上没有msdaora)错误信息:Msg 7357, Level 16, State 2, Line 1Cannot process the object {CALL SCOTT.USP_WCARROLL_PROC({resultset 25, OUTPUT})}.The OLE DB provider OraOLEDB.Oracle for linked server ORACLE92 indicates that either the object has no columns or the current user does not have permissions on that object./*创建Oracle对象的SQL Plus代码*/create or replace procedure SCOTT.USP_WCARROLL_PROC(OUTPUT OUT dbms_output.chararr)isbeginOUTPUT(1):=One;OUTPUT(2):=Two;OUTPUT(3):=Three;end;/?select * from openquery(ORACLE92, {CALL SCOTT.USP_WCARROLL_PROC({resultset 25, OUTPUT})});?*** 方法2 ***向Oracle表中插入记录,且该操作触发一个会调用存储过程的触发器可以在Oracle中创建一个表,并在上面放置一个由insert操作触发的触发器;在触发器中,会调用Oracle存储过程。如果你的Oracle技术比我好,你的触发器应当能够得到被插入的记录数据并把它们传递到Oracle存储过程作为参数。为了返回数据,可以利用存储过程更新Oracle表中的记录,然后重新查询记录,以此从SQL Server中得到返回参数。这种方法在msdaora和oraOLEDB.oracle上都适用。所以这个方法将适用于Oracle 64位的OLEDB接口。?/* 创建Oracle对象的SQL Plus代码 */create table SCOTT.TBL_WCARROLL(idint,mydate varchar2(100));/?create table SCOTT.TBL_WCARROLL_CALLPROC(idint,param1int,param1 varchar2(100));/?create or replace

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档