如何通过Oracle Database Link执行远程查询

时间:2013-02-16 00:46:16

标签: sql-server oracle

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

1 个答案:

答案 0 :(得分: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;