首页 文章

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

提问于
浏览
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上创建视图 .

1 回答

  • 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;
    

相关问题