在SQL Server里的查询分析器里可以select到oracle表里面的数据了,但不知道如何调用oracle的存储过程select * from www..SCOTT.DEPT
返回结果如下:
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON我在oracle创建不带参数的存储过程如下:SQL> create or replace procedure out_time
  2  is
  3  begin
  4    dbms_session.set_nls('nls_date_format','''yyyy_mm_dd hh24:mi:ss''');
  5    dbms_output.put_line(sysdate);
  6  end;
  7  /过程已创建。SQL> exec out_time;
2008_11_24 17:14:27PL/SQL 过程已成功完成。我在SQL Server的查询分析器里测试:
select * FROM   OPENQUERY(www,'out_time')
GO报错如下:服务器: 消息 7357,级别 16,状态 2,行 1
未能处理对象 'out_time'。OLE DB 提供程序 'MSDAORA' 指出该对象中没有任何列。
OLE DB 错误跟踪[Non-interface error:  OLE DB provider unable to process object, since the object has no columnsProviderName='MSDAORA', Query=out_time']。

是什么原因?我调用方式有问题?不带参数的怎么调用?带参数的呢?

解决方案 »

  1.   

    考虑权限角色等等,实现上可能较为困难。能否使用DTS使Oracle导入相关数据至Sqlserver中,在Sqlserver中运行自已的存贮过程不行吗?给个以前的镜子,参考一下:
    http://topic.csdn.net/t/20060531/12/4790992.html
      

  2.   


    换一下其它方式建立键接,OLE的方式好象对调用procedure是有问题的.
      

  3.   

    --创建链接服务器
    exec sp_addlinkedserver 'OrclDB ','Oracle',' MSDAORA','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'OrclDB,'false',null,'用户名','密码'
    exec sp_serveroption 'OrclDB,'rpc out','true' --这个允许调用链接服务器上的存储过程
    go你试按这个方法连接数据,再执行
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/ms189063.aspx
      

  5.   

    sp_addlinkedserver 'SQLAdWorks', ' ', 'MSDASQL', 'SystemDSN'
    我换这种方式(ODBC)测试结果跟上面的还是一样
      

  6.   

    NND,DTS也解决不了我那个问题,也就是ORACLE的多数目标表里有TIMESTAMP类型的字段,
    一遇到有那种字段的表就报错,用链接服务器和DTS都是,我想用链接服务器调用oracle的
    存储过程也是基于想用oracle存储过程把想要的数据转换到自己建的一张表里再在SQL Server
    那边select(在SQL 的一个存储过程里,先执行ORACLE里的存储过程把目标数据写到没有
    字段的表里,再通过链接服务器select没有问题字段的表)
      

  7.   

    要现在想了个办法,在oracle里定义一个job,定期执行oracle里自己写的存储过程把数据复制到没有跟SQL Server兼容问题的表自建里,然后SQL Server通过链接服务器来select这个表,这是没有办法的办法(因为定义的job时间间隔不能太短,太短影响服务器性能,也不能太长,太长数据及时性不够),本来我想让SQL Server Select前执行复制数据的oracle存储过程,这样就可以达到数据的实时性。