1

我使用 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 上创建视图。

4

1 回答 1

1

您很可能需要使用该DBMS_HS_PASSTHROUGH。就像是

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;
于 2013-02-16T03:21:56.980 回答