如何跨数据库链接远程连接sysdate结果?

时间:2014-08-14 15:18:22

标签: oracle sybase dblink

我在Oracle的Sybase服务器的数据库链接上运行查询。

在其中where子句是对日期的限制,我希望它与sysdate绑定,所以像这样:

  

从some_remote_view中选择*,其中some_numeric_key = 1和   some_date> SYSDATE + 2

问题是,当我解释计划时,只有条件some_numeric_key = 1出现在实际的sql中才会远程连接到sybase服务器。 Oracle希望能够执行日期过滤器。

这导致了性能噩梦 - 我需要远程更新日期过滤器以使此查询快速运行

即使我尝试将sysdate强制转换为类似这样的charcater字符串: TO_CHAR(SYSDATE-2,' YYYY-MM-DD&#39)

它仍然没有远程。

有什么办法可以让Oracle通过db链接到Sybase远程过滤这个日期过滤器吗?

1 个答案:

答案 0 :(得分:2)

在Oracle和其他平台之间进行集成我经常遇到这个问题,不仅仅是SYSDATE,还有其他非标准函数。

有两种方法可以解决这个问题,第一种方法是我的经验中最可靠的。

首先,您可以使用所需的过滤器在远程数据库上创建视图,然后在Oracle端,您只需从新视图中选择,而无需其他过滤器。

其次,如果不允许在远程端创建对象,请尝试在Oracle SELECT语句中使用绑定变量(正确的数据类型!),例如:

declare
   v_some_date constant date := sysdate + 2;
begin
    insert into oracle_table (...)
    select ...
      from remote_table@db_link t
     where t.some_numeric_key = 1
       and t.some_date > v_some_date;

    commit;
end;
/