【问题标题】:How to execute remote query by Oracle Database Link如何通过 Oracle Database Link 执行远程查询
【发布时间】:2013-02-16 11:21:56
【问题描述】:

我使用 Oracle Database Link 从 SQL Server 查询数据。查询是这样的:

select *
from tableA@DL_SqlServer a
join tableB@DL_SqlServer b
on a.ID = b.ID

tableA 和 tableB 很大,结果比较小。此查询在 SQL Server 中快速执行,因为索引是在两个表上构建的。但是 Oracle 数据库链接到 SQL Server 的速度非常慢。我猜联接操作是在 Oracle 端而不是在 SQL Server 端执行的,因此不使用索引。因为我只需要连接的结果,所以我更喜欢完全在 SQL Server 上执行查询并只获得小的结果。我知道使用 SQL Server 的链接服务器和 OPENQUERY 函数可以实现这个目标。我想知道如何在 Oracle Database Link 上执行此操作。谢谢!顺便说一句,我没有权限在 SQL Sevrer 上创建视图。

【问题讨论】:

  • 在你的 sql server 上为它创建一个视图。
  • 抱歉,我没有权限在 SQL Sevrer 上创建视图。

标签: sql-server oracle


【解决方案1】:

您很可能需要使用DBMS_HS_PASSTHROUGH package。类似的东西

DECLARE
  l_cursor PLS_INTEGER;
BEGIN
  l_cursor := dbms_hs_passthrough.open_cursor@dblink_to_sql_server;
  dbms_hs_passthrough.parse@dblink_to_sql_server( l_cursor, <<select statement>> );
  while dbms_hs_passthrough.fetch_row@link_to_sql_server(l_cursor) > 0 
  loop
    dbms_hs_passthrough.get_value@dblink_to_sqlserver( l_cursor, 1, <<local variable for first column>> );
    dbms_hs_passthrough.get_value@dblink_to_sqlserver( l_cursor, 2, <<local variable for second column>> );
    ...
  end loop;
  dbms_hs_passthrough.close_cursor@dblink_to_sqlserver( l_cursor );
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多